使用Webforms和EPPlus下载文件

问题描述 投票:0回答:1

我正在为旧版Webforms应用程序实现小型导出功能。

我现在的导出代码只是标题(只是测试我可以成功创建文件的标题):

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软件包保存到磁盘。这似乎没有问题。因此,问题出在将程序包写入内存流和返回结果之间。

我正在为旧版Webforms应用程序实现小型导出功能。现在我的导出代码只是标头(只是测试我可以成功创建文件的标头):public MemoryStream ...

c# webforms epplus
1个回答
0
投票

这是对我有用的代码

© www.soinside.com 2019 - 2024. All rights reserved.