Я реализую небольшую функцию экспорта для устаревшего приложения веб-форм.
Мой код экспорта сейчас только заголовки (просто проверяю, что я могу успешно создать файл):
public MemoryStream Export()
{
var result = new MemoryStream();
using (var p = new ExcelPackage())
{
var ws = p.Workbook.Worksheets.Add("Contacts");
var col = 1;
ws.Cells[1, col++].Value = "ID";
ws.Cells[1, col++].Value = "First Name";
ws.Cells[1, col++].Value = "Last Name";
ws.Cells[1, col++].Value = "Email";
ws.Cells[1, col++].Value = "Phone";
ws.Cells[1, col++].Value = "Address";
p.SaveAs(result);
}
return result;
}
Вот обработчик кнопки:
var ms = Export();
ms.WriteTo(HttpContext.Current.Response.OutputStream);
HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
HttpContext.Current.Response.AddHeader("Content-Disposition", $"attachment;filename=Contacts_{DateTime.Now:yyyyMMddhhmmss}.xlsx");
HttpContext.Current.Response.StatusCode = 200;
// HttpContext.Current.Response.End();
Итак, одна проблема состоит в том, что все примеры, которые я нахожу, имеют вызов HttpContext.Current.Response.End () в конце метода, но если я это сделаю это исключение. Комментирование этой строки, кажется, работает нормально, но это приводит меня к моей главной проблеме: когда файл сохраняется и затем открывается в Excel, Excel жалуется, что есть проблема с файлом. У меня сложилось впечатление, что EPPlus создает правильно сформированные файлы, так чего мне не хватает?
Обновление # 1 Я пытался напрямую сохранить пакет EPPlus на диск. Это, кажется, работает без проблем. Таким образом, проблема лежит где-то между записью пакета в поток памяти и возвратом результата.