Excel Interop - рисовать все границы в диапазоне
Из документации Microsoft я вижу, что я могу получить доступ к конкретным пограничным границам ячейки с использованием свойства "xlBordersIndex" и, например, установить стиль рамки для левого края ячейки:
range.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft].LineStyle = Excel.XlLineStyle.xlContinuous;
Но что, если я просто хочу рисовать все границы? Я пробовал
range.BorderAround2();
но это просто рисует прямоугольник вокруг самого диапазона, который я понимаю. Итак, я попробовал
range.Cells.BorderAround2();
думая, что он пройдет через каждую из ячеек в пределах диапазона и поместит все границы вокруг каждой ячейки. Это не то, что произошло. Итак, чтобы получить все границы вокруг всех ячеек в диапазоне, нужно ли мне вручную обращаться к каждому из четырех пограничных индексов?
Ответы
Ответ 1
private void AllBorders(Excel.Borders _borders)
{
_borders[Excel.XlBordersIndex.xlEdgeLeft].LineStyle = Excel.XlLineStyle.xlContinuous;
_borders[Excel.XlBordersIndex.xlEdgeRight].LineStyle = Excel.XlLineStyle.xlContinuous;
_borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle = Excel.XlLineStyle.xlContinuous;
_borders[Excel.XlBordersIndex.xlEdgeBottom].LineStyle = Excel.XlLineStyle.xlContinuous;
_borders.Color = Color.Black;
}
Ответ 2
Я еще не знаком с С#, но в VBA есть свойства Range.Borders(xlInsideVertical)
и Range.Borders(xlInsideHorizontal)
. Попробуйте использовать макро-рекордер и примените все границы для любой области рабочей книги. Возможно, это поможет.
Ответ 3
oRange = SHEET2.get_Range("a1", "a10");
oRange.Borders.get_Item(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous;
oRange.Borders.get_Item(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous;
oRange.Borders.get_Item(Excel.XlBordersIndex.xlInsideHorizontal).LineStyle = Excel.XlLineStyle.xlContinuous;
oRange.Borders.get_Item(Excel.XlBordersIndex.xlInsideVertical).LineStyle = Excel.XlLineStyle.xlContinuous;
Ответ 4
Наконец, я понял. Я сделал это, не влияя на производительность. Я беру простой пример, чтобы объяснить здесь:
До
![введите описание изображения здесь]()
Мне удалось сохранить диапазон A1:C4
в переменной динамически в exRange и использовать приведенный ниже код, чтобы предоставить границу
((Range)excelSheet.get_Range(exRange)).Cells.Borders.LineStyle = XlLineStyle.xlContinuous;
После
![введите описание изображения здесь]()
Ответ 5
For Each range In ranges
For Each row As Range In .Range(range).Rows
row.Cells.BorderAround(XlLineStyle.xlContinuous)
row.Cells.Borders.Item(XlBordersIndex.xlInsideHorizontal).LineStyle = XlLineStyle.xlContinuous
row.Cells.Borders.Item(XlBordersIndex.xlInsideVertical).LineStyle = XlLineStyle.xlContinuous
Next
Next
Ответ 6
Почему бы просто не сделать:
Excel.Range tRange = xlWorkSheet.UsedRange;
tRange.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;
tRange.Borders.Weight = Excel.XlBorderWeight.xlThin;
Примечание. Примените границу после строки и ячейки (диапазона), заполненной данными, чтобы получить диапазон, просто используя функцию .UsedRange()
Ответ 7
Microsoft.Office.Interop.Excel.Range tRange = xlWorkSheet.UsedRange;
tRange.Borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
tRange.Borders.Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin;