InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
También puedes ver ...
TransactionScope - Simplificando el trabajo con transacciones.
LinQ To SQL - Un ejemplo sencillo
Cómo activar Intelisense (autocompletado) en el Web.config
Leer un campo XML de SQL Server 2005 con C#
TripleDES - Un ejemplo practico en C#
Mostrar un GridView dentro de un DataList
String.Format
Métodos Extensores: INNER JOIN
Sitios Web de ejemplo ASP.NET
Problemas en la instalación de Visual Studio 2008-Visual studio web authoring component

Afiliados
La Web del programador
MundoProgramacion


 

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


 Versión para imprimir  Foros de consulta

 
Gracias! por Mundo
Respuesta recibida el [10/05/2007 04:35:24]
Chingon viejo!!! Habia llegado a un grado de frustración critico!

 
Y para crear varias hojas? por Raul
Respuesta recibida el [12/07/2007 07:19:03]
Se podria crear un archivo excel com este metodo pero que el archivo excel tenga 4 hojas y en cada hoja almaceno diferentes datos? please mandame un mail: ravpweb@hotmail.com

 
las 8 reinas por donovan
Respuesta recibida el [09/10/2007 05:24:35]
Como puedo hacer el programa de las 8 reinas en C# pero que el programa pregunte cuantas reinas quieres hubicar y que el programa las ubique 

 
No anda!!!!! por leo
Respuesta recibida el [11/12/2007 05:47:01]
no no no me anda ni a palo, te paso los errores que me da: 

Errores al cargar el diseñador. Los errores se citan a continuación. Algunos errores se pueden corregir volviendo a generar el proyecto, otros puede que requieran cambios en el código.

No se puede mostrar el diseñador para este archivo porque ninguna de las clases que contiene se pueden diseñar. El diseñador inspeccionó las siguientes clases en el archivo: Principal --- La clase base 'System.Object' no se puede diseñar. GenExcell --- La clase base 'System.Object' no se puede diseñar. Form1 --- La clase base 'System.Object' no se puede diseñar.
Ocultar

en System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.EnsureDocument(IDesignerSerializationManager manager)
en System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
en Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
en System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host)

Error 1 'Devjoker.Form1.Dispose(bool)': no se encontró ningún miembro adecuado que reemplazar C:\Documents and Settings\Abril y Gabriel\Configuración local\Datos de programa\Temporary Projects\WindowsApplication1\Form1.Designer.cs 14 33 WindowsApplication1
Error 2 El programa 'C:\Documents and Settings\Abril y Gabriel\Configuración local\Datos de programa\Temporary Projects\WindowsApplication1\obj\Release\WindowsApplication1.exe' tiene más de un punto de entrada definido: 'Devjoker.Principal.Main()' C:\Documents and Settings\Abril y Gabriel\Configuración local\Datos de programa\Temporary Projects\WindowsApplication1\Form1.cs 10 22 WindowsApplication1
Error 3 El programa 'C:\Documents and Settings\Abril y Gabriel\Configuración local\Datos de programa\Temporary Projects\WindowsApplication1\obj\Release\WindowsApplication1.exe' tiene más de un punto de entrada definido: 'WindowsApplication1.Program.Main()' C:\Documents and Settings\Abril y Gabriel\Configuración local\Datos de programa\Temporary Projects\WindowsApplication1\Program.cs 13 21 WindowsApplication1

 
Como leer desde .Net dicha fichero excel por Wafu
Respuesta recibida el [31/01/2008 08:55:04]
Muy bueno el artículo, pero podrías añadir como luego desde .net puedo leer dicha tabla y metarla en un datatable.

Gracias.

 
Lo máximo por DJ
Respuesta recibida el [03/02/2008 07:45:34]
Muchas gracias es un muy buen truco

 
Excelente, pero... y las multiples hojas? por Omar Chavez
Respuesta recibida el [20/02/2008 06:41:34]
Primero que nada, EXCELENTE! ... este artículo me alivianará mucho!.

Pero...

Ya preguntaron, no veo respuesta... URGE! ... como hacer que un archivo de EXCEL tenga multiples hojas con éste metodo!

Lo ocupo asi! :S ... cualquier solución omar_chavez@hotmail.com por favor!

De antemano, gracias!

 
para preguntar usar los foros por aldeamedia
Respuesta recibida el [21/02/2008 04:11:52]
Para preguntar usar los foros, no respondemos ni por email ni en los comentarios.


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



 Versión para imprimir

Generar un fichero Excel con C# sin tener Excel instalado
Autor: Pedro Herrarte Sánchez
Visitas: 9196 Fecha de publicación: 01/08/2006
Pedro Herrarte, es consultor independiente, ofreciendo sercivios 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, bases de datos (SQL Server y ORACLE) e integración de sistemas.

Es experto en desarrollo (C#, ASP.NET, 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).

Es fundador, diseñador y programador de www.devjoker.com.




18/08/2008 SQL Server 2008
Visitas: 39 | Comentarios: 0 | Archivo: Articulos
Categorias: Transact-SQL
Visitas: 131 | Comentarios: 0 | Archivo: Articulos
Categorias: C#|ADO.NET|LinQ
Visitas: 161 | Comentarios: 1 | Archivo: Articulos
Categorias: Humor
Visitas: 154 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 123 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 210 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 278 | Comentarios: 5 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 4990 | Comentarios: 4 | Archivo: Articulos
Categorias: C#|Transact-SQL|LinQ
Visitas: 602 | Comentarios: 1 | Archivo: Articulos
Categorias: Visual Studio
Visitas: 1402 | Comentarios: 1 | Archivo: Articulos
Categorias: Transact-SQL

Útimos temas recibidos en los foros ...
Y lo mismo en WEB por systemat ... [C#] 1 18/08/2008
Manual del minicom de Linux con fotos. por Meta ... [UNIX] 4 17/08/2008
PROGRAMACION por JUANMA ... [Visual Basic .NET] 1 19/08/2008
Conectar ASP con B.D Informix por Franco ... [ASP] 9 02/05/2007
Codigo salir por Jazmin ... [ASP.NET] 1 18/08/2008
EXPORTAR DATOS A ARCHIVOS PLANOS. por WIX ... [ORACLE] 10 06/08/2007
formulario por artdark ... [C#] 2 04/08/2008
Codigo salir por Jazmin ... [ASP.NET] 0 18/08/2008
cambiar de modo un gried view por ivan ... [ASP.NET] 0 18/08/2008
ayuda urgente porfavor por vicancer ... [ASP.NET] 0 18/08/2008
pollo por hajaj ... [Actualidad] 1 15/08/2008
DIOS TE BENDIGA por El You ... [WIN 98/NT/2000/XP] 1 16/08/2008

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
23/12/2007 Primeras impresiones sobre Visual Studio 2008
22/10/2005 El lenguaje SQL    forma parte de...Tutorial SQL
11/09/2006 Trabajar con datos de tipo BLOB en ORACLE
06/07/2007 ¿Qué es el RSS?    forma parte de...Tutorial RSS
26/07/2006 Secuencias    forma parte de...Tutorial PL/SQL
18/10/2005 Enviar emails a través de un servidor SMTP autenticado con Java
08/09/2007 Funciones en Transact SQL    forma parte de...Tutorial de Transact SQL
12/01/2006 Introducción a PLSQL    forma parte de...Tutorial PL/SQL
08/07/2008 Fiddler - Indispensable para el desarrollo Web
13/08/2007 Reiniciar un campo identity en SQL Server

 

Encuesta
Si trabajas con .NET ¿Que entorno utilizas?
[Ver] [Votar]