C# 导出文件时出错:文件名的格式与文件扩展名指定的格式不同
这是我代码的导出部分:C# 导出文件时出错:文件名的格式与文件扩展名指定的格式不同,c#,asp.net,export,C#,Asp.net,Export,这是我代码的导出部分: 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
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()时代码>它抛出错误:
线程正在中止
我想这就是你想要的:
不要使用Response.End()
考虑使用:
Response.Flush()
Response.SuppressContent = True
HttpContext.Current.ApplicationInstance.CompleteRequest()
-----------------------------
不过。我很确定“保存扩展名为.XLS的html文件”总是会导致Excel显示错误
另一种方法是从中选择一些内容来创建适当的xls文件。我以前用过EPPlus,但是
如果您不熟悉NuGet软件包的安装,请从这里开始:它的microsofts bug,在msdn上您可以找到关于此的主题。我使用ClosedXMLStart解决了这个问题,它使用一个专门的库来创建Excel文件,例如。您现在所做的就是创建一个扩展名为.xls.wird的HTML页面。我不再收到回复。结束问题,但它仍然说它的格式与指定的格式不同。但是它打开了。我讨厌像这样的错误(我无法控制)显示给我的用户,即使它似乎对他们没有影响。ContentType=“application/vnd.ms excel”效果更好吗?只是尝试了一下。没有影响。我将完整的数据集导出到Excel文件中,如果单击该错误消息,它将正常打开,但显示错误消息的事实会让用户感到困惑。我添加了一点。我使用文本编辑器创建了一个html文件,其中包含一个表,Excel的行为如您所述。因此,该问题与asp.net无关。您需要的是创建excel电子表格的“适当”工具。这可能只需要10-20分钟就能解决。