这是我的代码的导出部分:
private void ExportGridView()
{
// Exports the data in the GridView to Excel
// First, fill the datagrid with the results of the session variable
DataTable gridDataSource = (DataTable)Session["SSRegisterSplit"];
DataGrid dgGrid = new DataGrid();
dgGrid.DataSource = gridDataSource;
dgGrid.DataBind();
// Exports the data in the GridView to Excel
string attachment = "attachment; filename=Claim_Details_" + LPI_ID + ".xls";
Response.ClearContent();
Response.AddHeader("content-disposition", attachment);
Response.ContentType = "application/ms-excel";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
dgGrid.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
}
导出时,它会自动显示在我的页脚中,并显示“打开”或“保存”选项。
如果我选择"打开",Excel启动,然后我收到错误框:
您要打开的文件,' Claim_Details_1586.xls'在... 格式不同于文件扩展名指定的格式。验证 该文件未损坏,在打开之前来自受信任的来源 文件。你想现在打开文件吗?
如果我选择'是',则会打开该文件,但不会包含所有记录。
关于发生了什么/如何修复它的任何想法?
在函数中设置一个断点,我注意到当它到达Response.End();
时会抛出错误:
线程被中止。
答案 0 :(得分:0)
我认为这就是你想要的: Is Response.End() considered harmful?
不要使用Response.End() 考虑使用:
Response.Flush()
Response.SuppressContent = True
HttpContext.Current.ApplicationInstance.CompleteRequest()
-----------------------------
然而。我非常确定“保存带.XLS扩展名的html文件”将始终导致Excel显示错误。
另一种方法是从http://nugetmusthaves.com/Tag/Excel中选择一些东西来创建一个合适的xls文件。我之前使用过EPPlus,但this page suggests that ClosedXML will do it for you in 5 lines。
如果您不熟悉安装NuGet软件包,请从此处开始:https://docs.microsoft.com/en-gb/nuget/tools/package-manager-ui