Excel Range.BorderAround (), граница всегда черная - PullRequest
21 голосов
/ 15 февраля 2010

Это код, который я использую:

rngData.BorderAround(Excel.XlLineStyle.xlContinuous,
        Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin,
        Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexNone,
        System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.FromArgb(178, 178, 178)));

Цвет границы всегда черный, независимо от того, какое значение RGB я предоставляю.

Ответы [ 6 ]

56 голосов
/ 23 июня 2010

У меня была та же проблема, я не мог найти какое-либо решение в Интернете, документация MS для использования этого метода в VSTO немного скудна.

В любом случае, возможно, вы немного опоздали, поскольку видели несколько месяцев назад, но мой обходной путь - просто не использовать метод Range.BorderAround и пишите мой собственный!

    private void BorderAround(Excel.Range range, int colour)
    {
        Excel.Borders borders = range.Borders;
        borders[Excel.XlBordersIndex.xlEdgeLeft].LineStyle = Excel.XlLineStyle.xlContinuous;
        borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle = Excel.XlLineStyle.xlContinuous;
        borders[Excel.XlBordersIndex.xlEdgeBottom].LineStyle = Excel.XlLineStyle.xlContinuous;
        borders[Excel.XlBordersIndex.xlEdgeRight].LineStyle = Excel.XlLineStyle.xlContinuous;
        borders.Color = colour;
        borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
        borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
        borders[Excel.XlBordersIndex.xlDiagonalUp].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
        borders[Excel.XlBordersIndex.xlDiagonalDown].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
        borders = null;
    }

Может быть вызвано в соответствии с приведенным ниже примером (Contents_Table - это NamedRange в моей рабочей таблице):

BorderAround(Contents_Table.Cells, System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.FromArgb(79, 129, 189)));

Надеюсь, это поможет кому-то еще оторвать им волосы.

8 голосов
/ 04 января 2011

В качестве альтернативы, если вы не беспокоитесь, чтобы обеспечить удаление внутренних и диагональных линий, я успешно использовал:

range.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;
range.Borders.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.FromArgb(153, 153, 153));
5 голосов
/ 07 апреля 2012
worksheet.Cells[8, i].Borders.Color = 
    System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red); 
2 голосов
/ 11 января 2013
range.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;

range.Borders.Color = System.Drawing.ColorTranslator.ToOle(Color.Red);
2 голосов
/ 19 августа 2010
.Range("H1:J1").BorderAround LineStyle:=xlContinuous, Weight:=xlMedium, color:=RGB(130, 130, 130)
0 голосов
/ 26 января 2018

Чтобы изменить цвет границы, вы должны использовать либо

Color:=RGB(255, 0, 0)

с интересующим вас RGB-кодом или ColorIndex:=3 - например, получить красный цвет.

Если вы используете оба, [ColorIndex:=3] будет переопределять [Color:=RGB(255, 0, 0)] - действие, видимое, когда вы пытаетесь установить разные цвета для каждого или используете [colorindex:=xlColorIndeAutomatic] или с [xlColorIndexNone].

В отличие от формул Excel, в VBA вы можете и, вероятно, должны пропускать параметры, как это предусмотрено в IntelliSense VBA ...

...