我有一个asp.net页面,其中有一个gridview和一个按钮。 在按钮单击事件上,我编写了将gridview导出到excel的代码,该代码工作正常。 但是当我尝试打开导出的excel文件时,它会显示一个对话框,说明:
“您尝试打开的文件格式与其他格式不同 由文件扩展名指定。验证文件是否已损坏 并且在打开文件之前来自受信任的来源“。
不仅如此,我将该excel文件作为附件发送到gmail并尝试在移动设备中打开,当时它作为html文件打开。我可以为此做什么,因为我的客户端将使用移动设备查看邮件
答案 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文件扩展名。当我开始使用带双引号的逗号分隔时,该消息消失了。
“一个”,“两个”,“三个”而不是一个,两个,三个