c# - según - formato condicional de una celda dependiendo del valor de otra
Cambiar el color de fondo de una celda de Excel usando hexadecimal da como resultado que Excel muestre un color completamente diferente en la hoja de cálculo (7)
Así que estoy configurando el Color interior de una celda Excel con un cierto valor, como se muestra a continuación:
worksheet.Cells[1, 1].Interior.Color = 0xF1DCDB;
Sin embargo, cuando abro la hoja de cálculo en Excel, veo que el color que salió es completamente diferente (en el caso anterior, el color en la hoja de cálculo resultante es 0xDCDCEF). Intenté algunos colores diferentes y siempre lo cambia, y no veo un patrón.
Hay alguna razón para esto? Incluso intenté establecer el color escribiendo Color.FromArgb (241, 220, 219) .ToArgb (), y sucedió lo mismo.
Pruebe worksheet.cells(1,1).interior.color = rgb(241, 220, 219).
EDITAR Soy tonto, me acabo de dar cuenta de que no estás usando VBA 8). Esto es un poco largo, pero ¿puedes intentar enviarlo como decimal? Por lo que vale, ... interior.color = & HF1DCDB funciona en VBA como does = 15850715.
Debe convertir el color del hexágono al sistema de color de Excel de la siguiente manera:
ColorConverter cc = new ColorConverter();
worksheet.Cells[1, 1].Interior.Color = ColorTranslator.ToOle((Color)cc.ConvertFromString("#F1DCDB"));
No es realmente un error, ya que el sistema de color de Excel siempre ha sido así. Es solo una cosa más que hace que C # - Excel interopera un dolor.
Finalmente lo descubrí, después de muchas pruebas, y fue algo realmente simple. Aparentemente, la biblioteca Interop de Excel tiene un error y está invirtiendo los valores de Rojo y Azul, así que en lugar de pasarle un hexágono de RGB, necesito pasar BGR, y de repente los colores funcionan bien. Me sorprende que este error no esté documentado en ningún otro lugar en Internet.
Entonces, si alguien más se encuentra con este problema, simplemente pase los valores de Excel en valores BGR. (O si usa Color.FromArgb (), pase Color.FromArgb (B, G, R))
Esta es información de contexto que puede explicar las respuestas.
Si con HTML especificas el color # FF9900 obtendrás lo que Excel llama Luz naranja. Si especifica el color # 003366 obtendrá lo que Excel llama Teal oscuro. Pero si quieres color naranja claro o verde oscuro con vba, debes especificar & H0099FF y & H663300.
Es decir, aunque la función vba es RGB (& Hrr, & Hgg, & Hbb), el número que genera es & Hbbggrr porque eso es lo que quiere el motor de visualización de Excel.
Supongo que la persona que codificó Excel Interop no sabía que Excel usa números no estándar para especificar colores.
Tenga en cuenta que esto no es un error. El rojo comienza desde el bit más bajo y el verde está en el medio y el azul toma los bits más altos.
BGR
00000000 00000000 00000000
El cálculo es: (65536 * Azul) + (256 * Verde) + (Rojo)
Gracias.
El color RGB solo se puede analizar a partir de una cadena HTML hex
:
Color colour = ColorTranslator.FromHtml("#E7EFF2");
Si tiene un valor alfa separado, puede aplicar esto (documentos):
Color colour = ColorTranslator.FromHtml("#E7EFF2");
Color transparent = Color.FromArgb(128, colour);
Solo quería publicar mi código también. Ya que no había una solución de copiar y pegar para mí. Basado en el código de Sandesh:
private void ColorMe(Color thisColor){
rng = xlApp.ActiveCell;
Color mycolour = ColorTranslator.FromHtml("#" + thisColor.Name.Substring(2, 6));
rng.Interior.Color = Color.FromArgb(mycolour.R, mycolour.G, mycolour.B);
}