¿Cómo generar un archivo .xls o .xlsx desde c# sin mensajes de advertencia?

publicado por: Anonymous

He encontrado en diferentes fuentes algunos ejemplos para exportar la información contenida en un control GridView (ASP.NET) o en un DataTable a un archivo .xls o .xlsx (Excel) desde C#.

En otra fuente, he encontrado el siguiente fragmento de código:

/// <summary>
/// Fuente: http://www.codeproject.com/Tips/344604/Export-to-EXCEL-from-Datatable-in-Csharp-Net
/// </summary>
/// <param name="dt"></param>
public void ExportToExcel(DataTable dt, String nombreDelArchivo)
{
    if (dt.Rows.Count > 0)
    {
        StringWriter tw = new StringWriter();
        HtmlTextWriter hw = new HtmlTextWriter(tw);
        DataGrid dgGrid = new DataGrid();
        dgGrid.DataSource = dt;
        dgGrid.DataBind();
        // Get the HTML for the control.
        dgGrid.RenderControl(hw);
        Response.ContentType = "application/xls";
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + nombreDelArchivo + "");
        Response.Write(tw.ToString());
        Response.End();
    }
}

Al ejecutar la funcionalidad anterior, obtengo el archivo Excel:

Resultado del archivo Excel a partir de un DataTable.

Pero antes de ver el contenido del archivo Excel, aparece la siguiente advertencia:

Mensaje de advertencia al abrir archivo Excel generado desde C#.

Después de presionar el botón Sí de la alerta anterior; el archivo se muestra correctamente.

Para eliminar la alerta anterior, he intentado:

  • Cambiar la extensión del archivo a generar (.xls, .xlx, .xlsx).
  • Usar el Content-Type application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  • application/vnd.ms-excel
  • application/xlsx
  • application/xls

Según la fuente; es una característica de seguridad; pero me preguntaba si existe otra manera de generar un archivo Excel desde C#, teniendo como base la información almacenada en un GridView o en un DataTable que en lo posible no genere este tipo de mensajes.

solución

Siempre que exportes un html y lo quieras ver como excel vas a tener ese mensaje.

Deberías usar librerías basadas en openxml como ser

ClosedXML – The easy way to OpenXML

para que se genere el excel de forma correcta y lo envies en el Response

Si analizas los ejemplo veras que puedes exportar directo un dataset a excel

Adding DataTable as Worksheet

Genera el excel con esta librería y lo envias en el Response, veras que este mensaje no debería aparecer cuando visualizas el documento.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *