【问题标题】:ASP.NET MVC EPPlus Download Excel FileASP.NET MVC EPPlus 下载 Excel 文件
【发布时间】:2013-09-10 21:25:33
【问题描述】:

所以我使用精美的 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" };
}

【问题讨论】:

    标签: c# asp.net asp.net-mvc epplus


    【解决方案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。

    【讨论】:

    • 这确实很好,放置了位置。谢谢大佬!
    猜你喜欢
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 2014-11-15
    • 1970-01-01
    相关资源
    最近更新 更多