导出文件给出了一个错误:文件名的格式与文件扩展名指定的格式不同

时间:2017-01-26 17:45:00

标签: 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 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();时会抛出错误:

  

线程被中止。

1 个答案:

答案 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