Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 升级到VS 2015,由于响应,现在导出Excel时出现问题。结束_C#_Visual Studio 2015_Export To Excel_Npoi - Fatal编程技术网

C# 升级到VS 2015,由于响应,现在导出Excel时出现问题。结束

C# 升级到VS 2015,由于响应,现在导出Excel时出现问题。结束,c#,visual-studio-2015,export-to-excel,npoi,C#,Visual Studio 2015,Export To Excel,Npoi,我正在将一个项目从VS 2012升级到2015,最后一个错误是导出Excel文件。我正在使用NPOI创建Excel文件,并使用下面的代码将其导出。代码到达Response.End()行后,我会收到以下错误消息: 在mscorlib.dll中引发异常:“System.Threading.ThreadAbortException” 其他信息:线程正在中止。 然而,该文件仍然可以下载,并且可以完美地打开。我尝试注释Response.End()行,但没有收到任何代码错误,但是,在打开Excel文件时,出

我正在将一个项目从VS 2012升级到2015,最后一个错误是导出Excel文件。我正在使用NPOI创建Excel文件,并使用下面的代码将其导出。代码到达Response.End()行后,我会收到以下错误消息:

在mscorlib.dll中引发异常:“System.Threading.ThreadAbortException” 其他信息:线程正在中止。

然而,该文件仍然可以下载,并且可以完美地打开。我尝试注释Response.End()行,但没有收到任何代码错误,但是,在打开Excel文件时,出现以下错误:

我们发现“ContactNPOI.xlsx”中的某些内容存在问题。你想让我们尽力恢复吗?如果您信任此工作簿的来源,请单击“是”。

所以我假设没有响应。End()流没有正确关闭还是什么?我开始研究并发现这是一个已知的问题,并尝试使用HttpContext.Current.ApplicationInstance.CompleteRequest()代替Response.End()。我尝试了这一点,但没有收到来自代码的错误,但不幸的是,在尝试打开Excel文件时仍然收到上述错误

下面是我的代码片段,有谁能建议对此进行修复,或者提供一种更干净的方法来导出Excel文件吗

XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sh = (XSSFSheet)wb.CreateSheet("Instructional Hrs");

//Create Header Row
var headerRow1 = sh.CreateRow(0);
headerRow1.CreateCell(0).SetCellValue("Jimmy G Rocks!!");

using (var stream = new MemoryStream())
{
    Response.Clear();
    wb.Write(stream);
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "ContactNPOI.xlsx"));
    Response.BinaryWrite(stream.ToArray());
    Response.Flush();
    Response.End();
    //HttpContext.Current.ApplicationInstance.CompleteRequest();
}

感谢@krlzlx的帮助……以下是最终对我有效的解决方案,它不会在visual studio或打开Excel文件时引发错误:

using (var stream = new MemoryStream())
{
    Response.Clear();
    wb.Write(stream);
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "CCR Student Instructional Hours.xlsx"));
    Response.BinaryWrite(stream.ToArray());
    Response.Flush();
    HttpContext.Current.ApplicationInstance.CompleteRequest();
    Response.Close();
}

我看到很多网站都说要用HttpContext.Current.ApplicationInstance.CompletelRequest()替换Response.End(),但在打开Excel工作表时,仅仅将该行调出就会导致错误。在继续玩之后,我发现在CompleteRequest行之后添加Response.Close()消除了Excel错误,现在我下载的是无错误的

无法重现您的错误。你的代码对我有用。请注意,抛出
ThreadAbortException
是正常的,非常感谢您的尝试……同样的代码在VS 2012中运行良好,所以我不知道几年前我是否做了一些事情来隐藏消息,但不记得了还是什么。你知道有没有更好的方法来导出不产生错误的文件吗?我使用了与你完全相同的代码来向客户端发送文件,只是在
响应之前有一个
响应。Close()
,但是我不认为这有什么区别。你检查了吗?请注意,我正在使用NPOI创建Excel文件,wb变量是我的NPOI创建的工作簿。。。