Mi trauma de los colorcitos en Excel.. X_x
Algo comun que piden para muchas aplicaciones es generar un Excel de lo que se esta mostrando, hay varios alternativas para hacerlo, por ejemplo generarlo desde el servidor y enviarlo al browser o enviar HTML como un MIME de Excel, pero de repente me dio la cosquilla de crearlo desde el propio Browser. Y la verdad no es tan complicado solo hay que tener instalado Excel en la maquina cliente ( Si no como para que querrian generar un Excel ¬¬ ) y Ejecutar un Active X que nos va a dejar crear el archivo como si lo estuvieramos haciendo desde C#:
A partir de ahi solo creamos los objetos del libro y la hoja de trabajo manipulamos las celdas, rangos, valores, etc, etc.
Y pues hasta ahi todo fue muy sencillito, como se ve en el codigo solo genera una tablita de 10x5, le pone un titulo a cada columna de la tabla, y da algo de formato a la tabla en general, pero la linea por la cual escrbi este post es esta
Y es que ese valor de 15453831 no parece ser ni HTML, ni Hexadecinal ni RGB, pero en realidad si es RGB en Hexadecinal!! *el publico exclama sorpresa*, pasa algo muy raro al generar el Excel de esta manera.
El color que representa 15453831 luce algo asi como esto:
Donde podemos ver el RGB del color
R: 135
G: 206
B: 235
si convertimos cada uno de los valores RGB a Hex nos daria:
R: 87
G: CE
B: EB
y aqui esta lo simpatico del asunto si colocamos los 3 hexadecimales en el orden RGB y los convertimos a decimal nos daria:
87 CE EB = 8,900,331.
pero al poner ese valor en el color interior de la celda no nos da ese color si no algun otro, pero al colocar los Hexadecimales en orden invertido (no RGB si no mas bien BGR )
EB CE 87 = 15,453,831.
Ya tenemos el color que queriamos aplicar ( Aplausos por favor :-D )
Y bueno asi fue como termino mi busqueda de igualar los colores de una exporatcion externa a una desde el cliente, ojala a alguien le sirva.
Saludos!!!
if (window.ActiveXObject)
{
try
{
var xlApp = new ActiveXObject('Excel.Application');
}
catch(e)
{
alert("Error");
return false;
}
}
A partir de ahi solo creamos los objetos del libro y la hoja de trabajo manipulamos las celdas, rangos, valores, etc, etc.
var xlBook = xlApp.Workbooks.Add();
var XlSheet = xlBook.Worksheets(1);
var theCell;
var range;
XlSheet.Activate();
for(var cell=1;cell<=10;cell++)
{
theCell = XlSheet.Cells(1 ,cell);
theCell.Value = 'Column' + cell;
theCell.Interior.Color = 15453831;
}
for(var row=2;row<=6;row++)
{
for(var cell=1;cell<=10;cell++)
{
theCell = XlSheet.Cells(row ,cell);
theCell.Value = '100';
}
}
range = XlSheet.Range("A1:J6");
range.Borders.LineStyle=-4142;
range.Borders.Color=16777215;
range.Font.Name='Calibri';
range.WrapText=true;
range.ColumnWidth=14;
range.Font.Size=8;
XlSheet.Application.Visible = true;
Y pues hasta ahi todo fue muy sencillito, como se ve en el codigo solo genera una tablita de 10x5, le pone un titulo a cada columna de la tabla, y da algo de formato a la tabla en general, pero la linea por la cual escrbi este post es esta
theCell.Interior.Color = 15453831;
Y es que ese valor de 15453831 no parece ser ni HTML, ni Hexadecinal ni RGB, pero en realidad si es RGB en Hexadecinal!! *el publico exclama sorpresa*, pasa algo muy raro al generar el Excel de esta manera.
El color que representa 15453831 luce algo asi como esto:
Donde podemos ver el RGB del color
R: 135
G: 206
B: 235
si convertimos cada uno de los valores RGB a Hex nos daria:
R: 87
G: CE
B: EB
y aqui esta lo simpatico del asunto si colocamos los 3 hexadecimales en el orden RGB y los convertimos a decimal nos daria:
87 CE EB = 8,900,331.
pero al poner ese valor en el color interior de la celda no nos da ese color si no algun otro, pero al colocar los Hexadecimales en orden invertido (no RGB si no mas bien BGR )
EB CE 87 = 15,453,831.
Ya tenemos el color que queriamos aplicar ( Aplausos por favor :-D )
Y bueno asi fue como termino mi busqueda de igualar los colores de una exporatcion externa a una desde el cliente, ojala a alguien le sirva.
Saludos!!!
Comentarios