Buscar

viernes, 12 de marzo de 2010

Exportar DataTable a Excel

Este código sirve para guardar un DataTable en un Excel, yo lo utilizo para agregar la función de exportar a Excel en la aplicaciones donde utilizo Grids, ya que utilizo una versión del TDBGrid que no le funciona bien el exportar a.


public static void  ExportarExcelDataTable(DataTable dt,string RutaExcel)
        {
            const string FIELDSEPARATOR = "\t"; 
            const string ROWSEPARATOR = "\n";
            StringBuilder output = new StringBuilder();     
            // Escribir encabezados    
            foreach (DataColumn dc in dt.Columns)    
            {        
                output.Append(dc.ColumnName);
                output.Append(FIELDSEPARATOR);    
            }
            output.Append(ROWSEPARATOR); 
            foreach (DataRow item in dt.Rows)    
            {        
                foreach (object value in item.ItemArray)        
                {            
                    output.Append(value.ToString().Replace('\n',' ').Replace('\r',' ').Replace('.',','));            
                    output.Append(FIELDSEPARATOR);        
                }       
                // Escribir una línea de registro        
                output.Append(ROWSEPARATOR);    
            }   
            // Valor de retorno    
           // output.ToString();
            StreamWriter sw = new StreamWriter(RutaExcel);
            sw.Write(output.ToString()); 
            sw.Close();
        }

17 comentarios:

  1. exelente!!!! nada mas que manda mal los acentos, de todos modos gracias por el gran aporte me ha servido mucho

    ResponderEliminar
  2. Para no tener problemas con los acentos definir:

    StreamWriter sw = new StreamWriter(RutaExcel, false, System.Text.Encoding.GetEncoding("iso-8859-1"));

    ResponderEliminar
  3. Mil gracias! esto estaba buscando anteriormente lo hacia escribiendo celda por celda y tardaba mucho, pero esto esta perfecto !!

    ResponderEliminar
  4. Increíble!!! Muchas gracias por la ayuda. Como extra, me gustaría comentar que también se puede definir una variable de tipo SaveFileDialog para obtener la ruta de guardado en el archivo, claro, tomando en cuenta que no se ha pedido antes.
    Gracias por el aporte. Se aprecia.

    ResponderEliminar
  5. Muchas gracias, me ayudo mucho este codigo

    ResponderEliminar
  6. Lo del StreamWriter no me funciona, lo tengo que escribir después de haber llamado a la función que exporta el Excel?? porque pruebo antes y después y cuando agrego la linea StreamWriter sw = new StreamWriter(RutaExcel, false, System.Text.Encoding.GetEncoding("iso-8859-1")); no se me llena el excel con los datos, Saludos

    ResponderEliminar
  7. Gracias... me ahorro bastante tiempo

    ResponderEliminar
  8. Me ayudo mucho tu código.. gracias

    ResponderEliminar
  9. Muy buen aporte, me ahorraste varias lineas de codigo viejito,
    Muchas gracias. Sos Grande

    ResponderEliminar
  10. disculpe, soy novato, pero de que manera de podria usar el codigo compartido? tenemos que instanciarlo? con algun ejemplo porfavor

    ResponderEliminar
  11. Muchas gracias.
    Para que funcione el deben agregar la librería:
    using System.IO;
    Para mi no fue necesario reemplazar los puntos por comas, por lo que modifique la línea de esta forma:
    output.Append(value.ToString().Replace('\n', ' ').Replace('\r', ' '));
    CESAR ST

    ResponderEliminar
  12. Muchas gracias. Me sirvió.

    ResponderEliminar
  13. Muy bueno, es muy rápido a comparación de otros métodos! Gracias!

    ResponderEliminar
  14. Excelente aporte muchas gracias y tambien le agregue para guardarlo el archivo con showdialog()

    SaveFileDialog fichero = new SaveFileDialog();
    fichero.Filter = "Excel (*.xls)|*.xls";
    if (fichero.ShowDialog() == DialogResult.OK)
    {

    ...
    .....
    ......

    StreamWriter sw = new StreamWriter(fichero.FileName, false, System.Text.Encoding.GetEncoding("iso-8859-1"));
    .......
    ........
    }

    ResponderEliminar
    Respuestas
    1. amigo una consulta para poder utilizar el show dialog tengo que referenciar algo?

      Eliminar