【问题标题】:GridView export to ExcelGridView 导出到 Excel
【发布时间】:2012-08-08 10:27:12
【问题描述】:

我有一个asp.net 页面,其中有一个gridview 和一个按钮。 在按钮单击事件中,我编写了将 gridview 导出到 excel 的代码,该代码运行良好。 但是当我尝试打开导出的 excel 文件时,它会显示一个对话框:

“您尝试打开的文件格式不同于 由文件扩展名指定。验证文件没有损坏 并且在打开文件之前来自受信任的来源”。

不仅如此,我在 gmail 中以附件的形式发送了该 excel 文件,并尝试在移动设备中打开它,当时它以 html 文件的形式打开。我该怎么办,因为我的客户将使用移动设备查看邮件.

【问题讨论】:

  • 你尝试什么..?输入您尝试过的代码
  • 您已将 html 表导出到具有 xls 或 xlsx 扩展名的文件(我假设通过 GridView.RenderControl Method)。 Excel 可以解释 html 表格,但它不是真正的 Excel 文件。使用 EPPLus 创建一个真正的 excel 文件。
  • @TimSchmelter 你能告诉我什么是 EPPPlus..
  • mathewtinus,稍微搜索一下就会得到这个链接epplus.codeplex.com 作为 epplus 的第一个结果。我第二次使用这个包的 Tim 的建议,因为它创建了一个本地 excel 文档,而不是下面使用的 html table hack。在更高版本的 excel 中,html 表格路由会导致错误和格式问题。

标签: c# asp.net gridview export-to-excel


【解决方案1】:

我建议创建一个实际的 Excel 文件,而不是使用 Excel 文件扩展名的 CSV 或 HTML。

一个简单的方法是使用ClosedXML

为此,请从 codeplex 站点下载 ClosedXML.dll 和 DocumentFormat.OpenXml.dll,并将它们作为引用添加到您的 ASP.NET 项目中。然后,在您的按钮单击事件中,您可以简单地设置一个 Excel 工作簿,从您绑定到 GridView 的同一 DataTable 创建一个工作表,并将工作簿文件保存在 HTTP 响应中。像这样的:

var wb = new ClosedXML.Excel.XLWorkbook();
DataTable dt = GetTheDataTable();
dt.TableName = "This will be the worksheet name";

wb.Worksheets.Add(dt);

Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename=\"FileName.xlsx\"");

using (var ms = new System.IO.MemoryStream()) {
    wb.SaveAs(ms);
    ms.WriteTo(Response.OutputStream);
    ms.Close();
}

Response.End();

我会选择 ClosedXML 而不是其他替代方案,因为许可证限制较少,文档极好,开发人员乐于助人且友好,并且该项目目前非常活跃。

【讨论】:

    【解决方案2】:

    在您的按钮点击事件中:

            protected void btnExcel_Click(object sender, ImageClickEventArgs e)
        {
            //export to excel
            Response.Clear();
            Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
            Response.Charset = "";
    
            // If you want the option to open the Excel file without saving then
            // comment out the line below
            // Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.ContentType = "application/vnd.xls";
            System.IO.StringWriter stringWrite = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
           //GV is the ID of gridview
            GV.RenderControl(htmlWrite);
            Response.Write(stringWrite.ToString());
            Response.End();
        }
    

    并在后面的页面代码中覆盖此方法:

        public override void VerifyRenderingInServerForm(Control control)
    {
        /* Confirms that an HtmlForm control is rendered for the specified ASP.NET
           server control at run time. */
    }
    

    【讨论】:

      【解决方案3】:

      当我导出到 excel 时,我只是创建了一个逗号分隔的文件并给它一个 excel 文件扩展名。当我开始使用带双引号的逗号分隔时,该消息消失了。

      “一”、“二”、“三”而不是一、二、三

      【讨论】:

        猜你喜欢
        • 2013-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-20
        • 1970-01-01
        相关资源
        最近更新 更多