VS 2012から2015にプロジェクトをアップグレードする途中で、Excelファイルをエクスポートする最終エラーが発生しました。私はNPOIを使ってExcelファイルとそれをエクスポートするコードを作成しています。コードは、Response.Endの()ラインをヒットしたら、私は次のようなエラーメッセージが表示されます:スローされVS 2015にアップグレードして、Response.EndのためにExcelをエクスポートできない
例外:がmscorlib.dll 追加情報の「System.Threading.ThreadAbortException」:スレッドが中止されていました。
ファイルはまだダウンロードされて完全に開きます。私はResponse.End()行をコメントアウトし、コードからエラーを受け取りませんでしたが、Excelファイルを開くときに次のエラーが表示されます。
'ContactNPOI.xlsx' 。できるだけリカバリーして欲しいですか?このブックのソースを信頼する場合は、[はい]をクリックします。
私はResponse.End()なしでストリームが正常に閉じていないと仮定しますか?私は調査を開始し、これが既知の問題であることを発見し、Response.End()の代わりにHttpContext.Current.ApplicationInstance.CompleteRequest()を使用しようとしました。私はこれを試して、コードからエラーは受け付けませんでしたが、残念ながら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();
}
エラーを再現できませんでした。あなたのコードは私のために働いていた。 ThreadAbortExceptionをスローする[Response.End](https://msdn.microsoft.com/en-us/library/system.web.httpresponse.end(v = vs.110).aspx)が正常であることに注意してください。 – krlzlx
試してくれてありがとう...この同じコードはVS 2012で正常に動作したので、何年も前にメッセージを隠すために何かをしたのか、覚えていないのか、何をしていないのか分かりません。エラーが発生していないファイルをエクスポートするより良い方法があるかどうかを知っていますか? –
私は 'Response.End()'の前に 'Response.Close()'がある以外は、クライアントにファイルを送るのとまったく同じコードを使用しましたが、違いはないと思います。この[質問](https://stackoverflow.com/q/20988445/1351076)をチェックしましたか? – krlzlx