我正在为旧版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 ...
这是对我有用的代码