【问题标题】:empty excel file when exporting to Gridview导出到 Gridview 时为空的 excel 文件
【发布时间】:2018-09-25 14:46:21
【问题描述】:

希望你能帮助我。 我正在开发一个网页,它在 aspx 中生成一个 GridView,它可以工作,一个按钮在单击时将 gridview 导出到 excel 文件。第二种情况对我不起作用,文件是空的。这是代码:

protected void Button2_Click(object sender, EventArgs e) //click en botón Exportar- -Click to export
{
   try
    {
        Response.Clear();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "CUSS - Global Stats.xls"));
        Response.ContentType = "application/ms-excel";
        Response.ContentEncoding = System.Text.Encoding.Unicode;  
        System.IO.StringWriter writer = new StringWriter();
        System.Web.UI.HtmlTextWriter html = new System.Web.UI.HtmlTextWriter(writer);
        GridView1.AllowPaging = false;
        GridView1.RenderControl(html); //gpp prints outs
        Response.Write(writer.ToString());
        Response.Flush();
        Response.End();
    }
    catch (Exception)
    {
    }

Gridview 在 asp 中正确生成,如图所示。GridViewResult

 protected void Button1_Click(object sender, EventArgs e)
    {

            ...
            GridView1.DataSource = Prints.ToList();
            GridView1.DataBind();
            ...

    }  

你能帮帮我吗?

【问题讨论】:

  • 这不是 Excel 文件,而是具有虚假内容类型的 HTML 表格。使用像 EPPlus 这样的库来创建真正的 xlsx 文件。
  • 开始使用专门的库来创建 Excel 文件,例如 EPPlus。您现在所做的只是创建一个扩展名为 .xls 的 HTML 页面。
  • 并处理错误。你的 catch 块是空的,所以如果有问题你不会知道的。
  • 您在哪里找到您在问题中发布的代码?我很好奇,我想追踪向全世界推荐导出 HTML 并给它一个 XLS 扩展的人。 Cargo Cult Programming 的一个很好的例子。
  • @mason,我问自己同样的问题。人们在哪里找到这种导出数据的方法......这种问题类型每隔几天就会出现......

标签: c# asp.net gridview


【解决方案1】:

应该有更好的方法来做到这一点,但我再次“制作”我的网格视图: using ClosedXML.Excel; 点击事件:

public void button1_Click(object sender, EventArgs e)
{
    using(XLWorkbook libro_trabajo = new XLWorkbook())
    {
        DataSet ps = datos_referencias();

        libro_trabajo.Worksheets.Add(ps);
        libro_trabajo.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
        libro_trabajo.Style.Font.Bold = true;
        Response.Clear();
        Response.Buffer = true;
        Response.Charset = "";
        Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        Response.AddHeader("content-disposition", "attachment;filename=reporte_clientes.xlsx");

        using (MemoryStream memoria = new MemoryStream())
        {

            libro_trabajo.SaveAs(memoria);
            memoria.WriteTo(Response.OutputStream);
            Response.Flush();
            Response.End();

        }
    }
}

获取我的数据集:

public DataSet datos_referencias()
{

    DataSet ds = new DataSet();
    DataTable tabla_detallado = new DataTable("Clientes");
    tabla_detallado.Columns.Add(new DataColumn("Cliente", typeof(string)));
    objeto = new Conexion();
    try
    {
        objeto.abrir_conexion_mysql();
        objeto.cadena_comando_mysql = "SELECT * from ...ETC ";
        objeto.aplicar_comando_mysql_extraccion();
        while (objeto.leer_comando.Read())
        {
            DataRow fila = tabla_detallado.NewRow();
            fila["Cliente"] = (objeto.leer_comando.GetString(1)).ToUpper();                
            tabla_detallado.Rows.Add(fila);
        }

    }
    finally {objeto.cerrar_conexion_mysql_extraccion(); }
    ds.Tables.Add(tabla_detallado);
    return ds;
}

【讨论】:

  • 这不会再次“制作 GridView”。它只是检索底层数据并使用它来生成文件——这正是它应该做的。
  • 谢谢梅森,我是新手,不知道如何正确解释
【解决方案2】:

也许是因为做出响应 GZip ?

打开过滤器?

response.Filter = New GZipStream(response.Filter, CompressionMode.Compress)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2016-11-25
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多