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分钟就能解决。