Как можно установить границу вокруг нескольких ячеек в Excel, используя C#
Я работаю над проектом, который создает файлы Excel.
У меня проблемы с размещением границы для нескольких ячеек для организации файла Excel.
Допустим, я хочу границу от ячейки B5 до B10. Не должно быть границ между B5, B6, B7,...
В настоящее время у меня есть этот код:
workSheet_range = worksheet.get_Range("B5", "B10");
workSheet_range.Borders.Color = System.Drawing.Color.Black.ToArgb();
Он создает границы, однако он помещает границу вокруг каждой ячейки вместо одной большой границы для всех ячеек.
Как я могу сделать это?
8 ответов
Вы должны индивидуально установить эти
.Borders[Excel.XlBordersIndex.xlEdgeBottom]
.Borders[Excel.XlBordersIndex.xlEdgeRight]
.Borders[Excel.XlBordersIndex.xlEdgeLeft]
.Borders[Excel.XlBordersIndex.xlEdgeTop]
Может быть, это может помочь:
workSheet_range.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThick);
Я сделал это без ущерба для производительности. Я беру простой Excel для форматирования:
До
Мне удалось сохранить диапазон как A1:C4
в переменной динамически в exRange и использовал приведенный ниже код, чтобы дать границу
((Range)excelSheet.get_Range(exRange)).Cells.Borders.LineStyle = XlLineStyle.xlContinuous;
После
Это код, который устанавливает границы вокруг каждой ячейки:
xlWS.get_Range("C9", "N9").Cells.Borders.Weight = XL.XlBorderWeight.xlMedium;
// ** - You Should do it in all Cells
//BorderAround: Medium**
worksheet.get_Range("b5", "b5").Cells.BorderAround(Missing.Value, Excel.XlBorderWeight.xlMedium, Excel.XlColorIndex.xlColorIndexAutomatic, ColorTranslator.ToOle(Color.FromArgb(255, 192, 0)));
worksheet.get_Range("b6", "b6").Cells.BorderAround(Missing.Value, Excel.XlBorderWeight.xlMedium, Excel.XlColorIndex.xlColorIndexAutomatic, ColorTranslator.ToOle(Color.FromArgb(255, 192, 0)));
worksheet.get_Range("b10", "b10").Cells.BorderAround(Missing.Value, Excel.XlBorderWeight.xlMedium, Excel.XlColorIndex.xlColorIndexAutomatic, ColorTranslator.ToOle(Color.FromArgb(255, 192, 0)));
Вот мое решение, используйте просто функцию UsedRange()
Excel.Range tRange = oSheet.UsedRange;
tRange.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;
tRange.Borders.Weight = Excel.XlBorderWeight.xlThin;
ws.UsedRange.BorderAround(
Xl.XlLineStyle.xlDash,
Xl.XlBorderWeight.xlThick,
Xl.XlColorIndex.xlColorIndexAutomatic,
ColorTranslator.ToOle(Color.Blue));
Этот код помещает границу вокруг области от (row1,col1) до (row2,col2). Отдельные ячейки не получают границы. Переменная color является целочисленным индексом цвета. См. http://www.databison.com/excel-color-palette-and-color-index-change-using-vba/ для списка номеров индексов и их соответствующих цветов.
Range cell1 = worksheet.Cells[row1,col1];
Range cell2 = worksheet.Cells[row2,col2];
Range range = worksheet.get_Range(cell1,cell2);
range.BorderAround(
Type.Missing, XlBorderWeight.xlThick, (XlColorIndex)color, Type.Missing );