Я нахожусь в процессе обновления проекта с VS 2012 до 2015, я дошел до последней ошибки, которая заключается в экспорте файлов Excel. Я использую NPOI для создания файла Excel и приведенного ниже кода для его экспорта. Как только код попадает в строку Response.End (), я получаю следующее сообщение об ошибке:
Возникло исключение: 'System.Threading.ThreadAbortException' в mscorlib.dll Дополнительная информация: поток был прерван.
Однако файл все еще загружается и открывается отлично. Я попытался закомментировать строку Response.End () и не получил ошибок из кода, однако при открытии файла Excel я получаю эту ошибку:
Мы обнаружили проблему с некоторым содержанием в "ContactNPOI.xlsx". Вы хотите, чтобы мы постарались восстановить как можно больше? Если вы доверяете источнику этой книги, нажмите Да.
Итак, я предполагаю, что без Response.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();
}
ThreadAbortException
нормально - person krlzlx   schedule 12.06.2017Response.Close()
передResponse.End()
, но я не думаю, что это имеет значение. Вы проверяли этот вопрос? - person krlzlx   schedule 12.06.2017