1

我正在使用以下代码将 EPPlus 包作为 asp.net MVC 中的 Excel 文件发送到客户端。但是,我遇到了抛出 OutOfMemoryException 异常的大文件的问题。

public class ExcelPackageResult : ActionResult
{
    public ExcelPackage ExcelPackage { get; set; }
    private string _fileName;

    public ExcelPackageResult(ExcelPackage excelPackage, string fileName)
    {
        ExcelPackage = excelPackage;
        _fileName = fileName;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        context.HttpContext.Response.ClearContent();
        ExcelPackage.SaveAs(context.HttpContext.Response.OutputStream);
        context.HttpContext.Response.AddHeader("content-disposition", string.Format(@"attachment;filename=""{0}.xlsx""", _fileName));
        context.HttpContext.Response.ContentType = "application/excel";
        context.HttpContext.Response.Flush();

        context.HttpContext.Response.End();

        ExcelPackage.Dispose();
    }
}

问题在于:ExcelPackage.SaveAs(context.HttpContext.Response.OutputStream);

我也试过: context.HttpContext.Response.BinaryWrite(ExcelPackage.GetAsByteArray());

有没有办法直接从 ExcelPackage 流式传输响应,而不是在发送之前为其分配一块内存?

4

1 回答 1

1

不幸的是,对于 EPPlus 来说,这可能是太多的数据。请参阅此了解一些背景:

EPPlus,处理大型 ExcelWorksheet

如果可以选择的话,对某些人有用的一件事是编译为 64 位:

EPPlus 大型数据集问题与内存不足异常

否则,您将不得不自己创建 xml 文件或某种 VBA 集成。两者都不漂亮。

于 2016-03-15T14:01:23.333 回答