C# GridView导出到Excel
我有一个asp.net页面,其中有一个gridview和一个按钮。 在button click事件中,我编写了将gridview导出到excel的代码,该代码运行得非常好。 但当我试图打开导出的excel文件时,会显示一个对话框,上面写着: “您试图打开的文件的格式与 由文件扩展名指定。请验证文件是否已损坏 并且在打开文件之前来自受信任的源”C# GridView导出到Excel,c#,asp.net,gridview,export-to-excel,C#,Asp.net,Gridview,Export To Excel,我有一个asp.net页面,其中有一个gridview和一个按钮。 在button click事件中,我编写了将gridview导出到excel的代码,该代码运行得非常好。 但当我试图打开导出的excel文件时,会显示一个对话框,上面写着: “您试图打开的文件的格式与 由文件扩展名指定。请验证文件是否已损坏 并且在打开文件之前来自受信任的源” 不仅如此,我在gmail中以附件的形式发送了那个excel文件,并试图在mobile中打开它,当时它以html文件的形式打开。我能做些什么,因为我的客户将
不仅如此,我在gmail中以附件的形式发送了那个excel文件,并试图在mobile中打开它,当时它以html文件的形式打开。我能做些什么,因为我的客户将使用mobile查看邮件。当我导出到excel时,我只是创建了一个逗号分隔的文件,并给它一个excel文件扩展名。当我开始用带双引号的逗号分隔时,这个消息就消失了
“一”、“二”、“三”而不是按钮单击事件中的一、二、三:
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. */
}
我建议创建一个实际的Excel文件,而不是使用Excel文件扩展名创建CSV或HTML 实现这一点的一个简单方法是使用 为此,请从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而不是其他替代方案,因为许可证限制较少,文档非常好,开发人员非常友好,而且项目目前非常活跃。您在尝试什么。。?如果您已经将html表导出到一个扩展名为xls或xlsx的文件中(我假设是通过),请将您已经尝试过的代码放入副本中。Excel可以解释html表,但它不是真正的Excel文件。使用EPPLus创建一个真正的excel文件。@TimSchmelter你能告诉我什么是EPPPlus吗..mathewtinus,稍微搜索一下就会得到这个linnk作为EPPLus的第一个结果。我赞同Tim关于使用这个包的建议,因为它创建了一个原生excel文档,而不是下面使用的html表黑客。在更高版本的excel中,html表格路由将导致错误和格式问题。