web-dev-qa-db-ja.com

ASP.NET MVC EPPlus Excelファイルをダウンロード

そこで、私は豪華なEPPlusライブラリを使用してExcelファイルを作成し、ユーザーにダウンロードしてダウンロードします。次の方法では、コードを最小化するためにいくつかのテストデータを使用しているので、後でデータベースに接続するために使用しているコードを追加します。これでファイルを完全にダウンロードできますが、ファイルを開くと、Excelはそれが有効なファイルではなく、破損している可能性があると警告します。ファイルを見に行くと、サイズが0KBと表示されています。だから私の質問は、どこで間違っているのですか?私はそれが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" };
}
18
Chiggins

これが私が使用しているものです-私はこれを数ヶ月間使用しており、問題はありませんでした:

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にリセットしないことです。

41
floppsb