Shaman.EPPlus + ASP.NET 核心 MVC - 部分已存在异常
Shaman.EPPlus + ASP.NET Core MVC - Part already exist exception
我正在使用 Shaman.EPPlus,一个应该与 ASP.NET Core MVC 兼容的 EPPlus 版本。
我正在尝试将对象集合导出为 xlxs 文件。
代码如下所示:
foreach(var client in clientsToExport)
{
clientList.Add(new object[] { "FirstName", client.FirstName });
}
MemoryStream stream = new MemoryStream();
using (ExcelPackage pck = new ExcelPackage(stream))
{
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Clients");
ws.Cells["A1"].LoadFromArrays(clientList);
pck.Save();
Response.Clear();
Response.Headers.Add("content-disposition", "attachment; filename=Clients.xlsx");
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
var bytes = pck.GetAsByteArray();
Response.Body.WriteAsync(bytes, 0, bytes.Length);
}
似乎在调用 GetAsByteArray 方法时抛出了包含消息 "Par already exist" 的异常。
at OfficeOpenXml.Packaging.ZipPackage.CreatePart(Uri partUri, String contentType, CompressionLevel compressionLevel)
at OfficeOpenXml.ExcelWorkbook.Save()
at OfficeOpenXml.ExcelPackage.GetAsByteArray(Boolean save)
你知道我可以检查什么吗?
问题是这些行:
pck.Save();
....
var bytes = pck.GetAsByteArray();
这两个调用都会导致包被 Epplus 关闭。您不需要 .Save
调用,因为 .GetAsByteArray
会自动调用它,所以只需删除第一行。
我正在使用 Shaman.EPPlus,一个应该与 ASP.NET Core MVC 兼容的 EPPlus 版本。 我正在尝试将对象集合导出为 xlxs 文件。 代码如下所示:
foreach(var client in clientsToExport)
{
clientList.Add(new object[] { "FirstName", client.FirstName });
}
MemoryStream stream = new MemoryStream();
using (ExcelPackage pck = new ExcelPackage(stream))
{
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Clients");
ws.Cells["A1"].LoadFromArrays(clientList);
pck.Save();
Response.Clear();
Response.Headers.Add("content-disposition", "attachment; filename=Clients.xlsx");
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
var bytes = pck.GetAsByteArray();
Response.Body.WriteAsync(bytes, 0, bytes.Length);
}
似乎在调用 GetAsByteArray 方法时抛出了包含消息 "Par already exist" 的异常。
at OfficeOpenXml.Packaging.ZipPackage.CreatePart(Uri partUri, String contentType, CompressionLevel compressionLevel)
at OfficeOpenXml.ExcelWorkbook.Save()
at OfficeOpenXml.ExcelPackage.GetAsByteArray(Boolean save)
你知道我可以检查什么吗?
问题是这些行:
pck.Save();
....
var bytes = pck.GetAsByteArray();
这两个调用都会导致包被 Epplus 关闭。您不需要 .Save
调用,因为 .GetAsByteArray
会自动调用它,所以只需删除第一行。