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 ningún administrador de sistemas de que lo instale (y muy bien que hace!).

    ¿Entonces que podemos hacer? La solución es más ingeniosa que técnica, 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 códgio C# necesario para generar este ejemplo.


using System;
using System.IO;
using System.Text;
namespace Devjoker        
{
                        
 public class Principal
 { 
  public static void Main()
  {
   GenExcell ge = new GenExcell();
   ge.DoExcell("nuevo_file.html");
   ge.DoExcell("nuevo_file.xls");
  }
 } 
 
 internal class GenExcell 
 {
StreamWriter w;


   public int DoExcell(string ruta)
   {
    FileStream fs = new FileStream(ruta, FileMode.Create,
FileAccess.ReadWrite);
    w = new StreamWriter(fs);   
    EscribeCabecera();         
                      
   for (int i=0;i<20;i++)
    {
     EscribeLinea(i);  
    }   
   
    EscribePiePagina();                             
    w.Close(); 
    return 0;
  }  
  
  public void EscribeCabecera()
  {
   StringBuilder html = new StringBuilder();
   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\">Iteración:</td>");
   html.Append("</tr>");
      
   w.Write(html.ToString());
  }
  
  public void EscribeLinea( int i)
  {   
   string bgColor = "", fontColor = "";
   if (i % 2 ==  0)
   {
    bgColor   = " bgcolor=\"LightBlue\" ";
    fontColor = " style=\"font-size: 10px;color: white;\" ";
   }
   w.Write(@"<tr ><td ></td><td {2} {3}>Titulo de la celda:{0}
         </td><td {2} {3}>Valor de la celda: {1}</td></tr>"

         ,i.ToString(),i.ToString(), bgColor, fontColor);
  }
  
  public void EscribePiePagina()
  {
   StringBuilder html = new StringBuilder();       
   html.Append(" </table>");
   html.Append("</p>");
   html.Append(" </body>");
   html.Append("</html>");
   w.Write(html.ToString());
  }
  
 }
} 

     Como vemos, el programa es tan sencillo como abrir un fichero y escribir en él código html que queramos en él. Lógicamente aunque el programa este escrito en C# es facilmente portable a cualquier otro lenguaje.

    Saludos, DJK

Pedro  Herrarte  Sánchez
Generar un fichero Excel con C# sin tener Excel instalado
Pedro Herrarte Sánchez

Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación. Posee mas de diez años de experiencia trabajando para las principales empresas de España. Es especialista en tecnologías .NET, entornos Web (ASP.NET, ASP.NET MVC,jQuery, HTML5), bases de datos (SQL Server y ORACLE) e integración de sistemas. Es experto en desarrollo (C#, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE). Pedro es MCP y MAP 2012, es fundador, diseñador y programador de www.devjoker.com..
Fecha de alta:01/08/2006
Última actualizacion:01/08/2006
Visitas totales:61234
Valorar el contenido:
Últimas consultas realizadas en los foros
Últimas preguntas sin contestar en los foros de devjoker.com