You are on page 1of 4

http://www.devjoker.com/html/Generar-un-fichero-Excel-con-C-sin-tener-Excelinstalado.html Generar un fichero Excel con C# sin tener Excel instalado.

En muchas ocasiones hemos necesitado generar ficheros Excel. Al usuario le gusta Excel y por eso quiere que las aplicaciones le den la posibilidad de guardar sus datos como Excel. Normalmente establecemos una referencia desde nuestro programa a Excel y generamos el fichero, con mayor o menor exito ... El problema surge cuando el proceso se desarrolla en un servidor, donde normalmente no est instalado Office, y no hay forma humana de convencer a ningn administrador de sistemas de que lo instale (y muy bien que hace!). Entonces que podemos hacer? La solucin es ms ingeniosa que tcnica, pero funciona perfectamente. Excel es capaz de interpretar ficheros html como si se tratasen de ficheros de Excel normales. Dado que los ficheros de html son ficheros de texto plano, solo debemos generar nuestro fichero en html pero darle la extension *.xls de excel. El siguiente ejemplo crea dos ficheros, ambos en formato html pero uno con extension *.html y otro con extension *.xls. Como podemos ver, el fichero *.xls se muestra como un archivo de Excel.

La siguiente imagen muestra el archivo con extension *.html visto en Internet Explorer.

El mismo fichero con extension *.xls visto con MicroSoft Excel. La posibilidad de usar estilos CSS nos permite generar ficheros muy vistosos.

El siguiente listado muestra el cdgio C# necesario para generar este ejemplo.


using System; using System.IO; usingSystem.Text; namespace Devjoker { publicclass Principal { publicstatic void Main() { GenExcellge = new GenExcell(); ge.DoExcell( "nuevo_file.html" ); ge.DoExcell( "nuevo_file.xls" ); } } internal class GenExcell { StreamWriter w; public intDoExcell(stringruta) { FileStream fs = newFileStream (ruta, FileMode.Create, FileAccess.ReadWrite);

w = newStreamWrit er(fs); EscribeCabecera(); for (int i=0;i<20;i++) { EscribeLinea(i); } EscribePiePagina(); w.Close(); return 0; } public void EscribeCabecera() { StringBuilder html = newStringBuilder (); html.Append( "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN \">"); html.Append( "<html>"); html.Append( " <head>" ); html.Append( "<title>www.devjoker.com</title>" ); html.Append( "<meta http -equiv=\"Content-Type\" content=\"text/html; charset=UTF -8\" />"); html.Append( " </head>" ); html.Append( "<body>"); html.Append( "<p>"); html.Append( "<table>"); html.Append("<tr style= \"font-weight: bold;font -size: 12px;color: white; \">"); html.Append( "<td></td> <td bgcolor= \"Blue\">Titulo de la tabla:</td>" ); html.Append( "<td bgcolor= \"Blue\">Iteracin:</td>" ); html.Append( "</tr>"); w.Write(html.ToStri ng()); } public void EscribeLinea( int i) { stringbgColor = "", fontColor = ""; if (i % 2 == 0) { bgColor = " bgcolor= \"LightBlue \" "; fontColor = " style=\"font-size: 10px;color: } w.Write(@"<tr><td ></td>< td {2} {3}>Titulo de </td><td {2} {3}>Valor de la celda: ,i.ToString(),i.ToString(), bgColor, } public void EscribePiePagina() { StringBuilder html = newStringBuilder (); html.Append( " </table>" ); html.Append( "</p>"); html.Append( " </body>" ); html.Append( "</html>"); w.Write(html.ToString()); } }

white; \" "; la celda:{0} {1}</td></tr>" fontColor);

Como vemos, el programa es tan sencillo como abrir un fichero y escribir en l cdigo html que queramos en l. Lgicamente aunque el programa este escrito en C# es facilmente portable a cualquier otro lenguaje. Saludos, DJK

You might also like