ASP.NET MVC EPPlus Скачать файл Excel

Итак, я использую причудливую библиотеку EPPlus, чтобы написать файл Excel и вывести его пользователю для загрузки. Для следующего метода я просто использую некоторые тестовые данные для минимизации кода, а затем добавлю код, который использую для подключения к базе данных позже. Теперь я могу загрузить файл в порядке, но когда я открываю файл, Excel жалуется, что это недействительный файл и может быть поврежден. Когда я смотрю на файл, он говорит, что он 0 КБ. Итак, мой вопрос: где я ошибаюсь? Я предполагаю, что это с MemoryStream. Раньше я мало работал с потоками, поэтому я не совсем уверен, что здесь использовать. Любая помощь будет оценена по достоинству!

[Authorize]
public ActionResult Download_PERS936AB()
{
    ExcelPackage pck = new ExcelPackage();
    var ws = pck.Workbook.Worksheets.Add("Sample1");

    ws.Cells["A1"].Value = "Sample 1";
    ws.Cells["A1"].Style.Font.Bold = true;
    var shape = ws.Drawings.AddShape("Shape1", eShapeStyle.Rect);
    shape.SetPosition(50, 200);
    shape.SetSize(200, 100);
    shape.Text = "Sample 1 text text text";

    var memorystream = new MemoryStream();
    pck.SaveAs(memorystream);
    return new FileStreamResult(memorystream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = "PERS936AB.xlsx" };
}

person Chiggins    schedule 10.09.2013    source источник


Ответы (1)


Вот что я использую - я использую это уже несколько месяцев и не имел проблем:

public ActionResult ChargeSummaryData(ChargeSummaryRptParams rptParams)
{
    var fileDownloadName = "sample.xlsx";
    var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

    var package = CreatePivotTable(rptParams);

    var fileStream = new MemoryStream();
    package.SaveAs(fileStream);
    fileStream.Position = 0;

    var fsr = new FileStreamResult(fileStream, contentType);
    fsr.FileDownloadName = fileDownloadName;

    return fsr;
}

Одна вещь, которую я сразу же заметил, заключается в том, что вы не сбрасываете позицию своего файлового потока обратно на 0.

person floppsb    schedule 11.09.2013
comment
Это исправило ситуацию очень хорошо, поставив позицию. Спасибо чувак! - person Chiggins; 11.09.2013