Подтвердить что ты не робот

Excel Interop - рисовать все границы в диапазоне

Из документации Microsoft я вижу, что я могу получить доступ к конкретным пограничным границам ячейки с использованием свойства "xlBordersIndex" и, например, установить стиль рамки для левого края ячейки:

range.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft].LineStyle =     Excel.XlLineStyle.xlContinuous;

Но что, если я просто хочу рисовать все границы? Я пробовал

range.BorderAround2();

но это просто рисует прямоугольник вокруг самого диапазона, который я понимаю. Итак, я попробовал

range.Cells.BorderAround2();

думая, что он пройдет через каждую из ячеек в пределах диапазона и поместит все границы вокруг каждой ячейки. Это не то, что произошло. Итак, чтобы получить все границы вокруг всех ячеек в диапазоне, нужно ли мне вручную обращаться к каждому из четырех пограничных индексов?

4b9b3361

Ответ 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;