2010-02-15 15 views
20

Este es el código que estoy utilizando:Excel Range.BorderAround(), Frontera es siempre negro

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))); 

El color del borde es siempre negro, no importa qué valor RGB que proporcionan.

Respuesta

51

Tuve el mismo problema, no pude encontrar ninguna solución en la web, la documentación de MS para el uso de este método en VSTO es un poco pobre.

De todos modos, probablemente sea un poco tarde para ti, ya que lo publicaste hace meses, pero mi solución fue simplemente no utilizar el método Range.BorderAround y escribir el mío.

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; 
    } 

puede invocarse como por ejemplo a continuación (Contents_Table es un NamedRange en mi hoja de trabajo):

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

Espero que esto ayude a alguien más por ahí rasgan las vestiduras.

2
.Range("H1:J1").BorderAround LineStyle:=xlContinuous, Weight:=xlMedium, color:=RGB(130, 130, 130) 
7

Alternativamente, si usted no está preocupado de asegurar la eliminación de líneas diagonales dentro y he utilizado con éxito:

range.Borders.LineStyle = Excel.XlLineStyle.xlContinuous; 
range.Borders.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.FromArgb(153, 153, 153)); 
5
worksheet.Cells[8, i].Borders.Color = 
    System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red); 
+0

manera corta y buena –

2
range.Borders.LineStyle = Excel.XlLineStyle.xlContinuous; 

range.Borders.Color = System.Drawing.ColorTranslator.ToOle(Color.Red); 
+0

lo siento preguntarle pero ¿cómo puedo conseguir objeto? – Divyesh

+0

Quiero dibujar un borde simple del rango de A1: M30 – Divyesh

0

Para cambiar el color del borde que hay que utilizar ya sea

Color:=RGB(255, 0, 0)

con el código RGB que le interesa, o ColorIndex:=3 - para obtener el color rojo, por ejemplo.

Si utiliza tanto, [ColorIndex:=3] anulará [Color:=RGB(255, 0, 0)] - acción visible cuando se intenta establecer diferentes colores para cada uno, o utilizar [colorindex:=xlColorIndeAutomatic] o con [xlColorIndexNone].

A diferencia de las fórmulas de Excel, en VBA que puede y probablemente debería omitir los parámetros que son sugeridos por intelisense de VBA ...

"gama"