GridView导出到Excel

时间:2012-08-08 10:27:13

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

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

  

“您尝试打开的文件格式与其他格式不同   由文件扩展名指定。验证文件是否已损坏   并且在打开文件之前来自受信任的来源“。

不仅如此,我将该excel文件作为附件发送到gmail并尝试在移动设备中打开,当时它作为html文件打开。我可以为此做什么,因为我的客户端将使用移动设备查看邮件

3 个答案:

答案 0 :(得分:2)

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

实现此目标的一种简单方法是使用ClosedXML

为此,请从codeplex站点下载ClosedXML.dll和DocumentFormat.OpenXml.dll,并将它们作为ASP.NET项目中的引用添加。然后,在按钮单击事件中,您只需设置一个Excel工作簿,从绑定到DataTable的同一GridView创建工作表,并将工作簿文件保存在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而不是其他选择,因为许可证限制较少,文档非常好,开发人员很有帮助且友好,而且项目目前非常活跃。

答案 1 :(得分:1)

在按钮点击事件中:

        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. */
}

答案 2 :(得分:0)

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

“一个”,“两个”,“三个”而不是一个,两个,三个

相关问题