2009-06-03 14 views
6

Tengo una hoja de Excel con algunas celdas que tienen un poco de color de fondo. Necesito este color en código html y, por lo tanto, quiero convertir Excel.Range.Interior.Color en formato RGB o System.Drawing.Color.Cómo convertir Excel.Range.Interior.Color a System.Drawing.Color en C#?

Después de hacer eso, utilizaría System.Drawing.ColorTranslator.ToHtml (System.Drawing.Color) para que el color se use en las etiquetas html.

He intentado hacer lo siguiente:

Excel.Range r = (Excel.Range)m_objRange[2, 2]; 
System.ComponentModel.TypeConverter converter = System.ComponentModel.TypeDescriptor.GetConverter(r.Interior.Color); 
       MessageBox.Show(""+converter.ConvertTo(r.Interior.Color,typeof(System.Drawing.Color))); 

pero me da un error que no puedo convertir a System.Double System.Drawing.Color

+0

valores de color de Excel se almacenan en un valor RGB de largo. El orden de colores de izquierda a derecha es Azul, Verde, Rojo. –

Respuesta

4

El valor devuelto por Excel.Range.Interior.Color es un valor entero largo de un color.

Ejemplos:

'# 000000 es igual a 0

' #FFFFFF es igual a 16777215

Es necesario para convertir el valor decimal en hexadecimal. A partir de ahí, es fácil convertir a RGB. (Grupo en 2 octetos, y convertir de nuevo a decimal) :)

+0

Funcionó. Gracias :) –

+1

3 años y medio más tarde y esto me ayuda ...:) El grupo en octetos parte. Gracias. – MarioTheHedgehog

13

Es mucho más fácil dejar que ColorTranslator haga el trabajo por usted:

System.Drawing.Color col = System.Drawing.ColorTranslator.FromOle((int) r.Interior.Color); 

Y cuando se está escribiendo un proyecto de Excel dentro de Visual Studio con el objetos proxy generados automáticamente (en lugar del proyecto normal de interoperabilidad), es necesario especificar r.Interior.Color a un doble, y luego de vuelta a un int:

System.Drawing.Color col = System.Drawing.ColorTranslator.FromOle((int)((double) r.Interior.Color)); 
+0

perfecto ... esto funcionó mejor para mí ... gracias. –