Загрузка файла с помощью веб-форм и EPPlus - PullRequest
0 голосов
/ 16 января 2020

Я реализую небольшую функцию экспорта для устаревшего приложения веб-форм.

Мой код экспорта сейчас только заголовки (просто проверяю, что я могу успешно создать файл):

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 на диск. Это, кажется, работает без проблем. Таким образом, проблема лежит где-то между записью пакета в поток памяти и возвратом результата.

1 Ответ

0 голосов
/ 16 января 2020

Вот код, который работает для меня

var ms = Export();
Response.Clear();
HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
HttpContext.Current.Response.AddHeader("Content-Disposition", $"attachment;filename=Contacts_{DateTime.Now:yyyyMMddhhmmss}.xlsx");
Response.AddHeader("Content-Length", ms.Length.ToString());
Response.BinaryWrite(ms.ToArray());
Response.End();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...