请注意,我已经找到了有关此问题的几个现有主题(EPPLUS IndexOutOfRangeException:工作表位置超出范围。),但没有一个仅特定于Linux发布。
我们有一个ASP.NET CORE 3.1网络项目与EPPlus 5.1.2库。
对于某些报表,我们打开一个预先存在的Excel模板(.xlsx),填充一些数据,然后返回给用户下载。在调试或将Web应用程序发布到Windows服务器时,一切都工作正常。
但是,如果我们发布到Linux服务器(Debian 10 64位),我们在尝试生成报告时会收到以下错误:
An unhandled exception occurred while processing the request.
IndexOutOfRangeException: Worksheet position out of range.
OfficeOpenXml.ExcelWorksheets.get_Item(int PositionID)
除此之外,其他一切似乎都工作正常(在Linux上)。
报表生成代码:
MemoryStream result;
FileInfo fileInfo = new FileInfo(Path.Combine(path, "template.xlsx"));
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
using (ExcelPackage xlPackage = new ExcelPackage(fileInfo))
{
ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets[0];
if (worksheet != null)
{
// fill some data ...
}
//return
result = new MemoryStream(xlPackage.GetAsByteArray());
}
我的第一个想法是在Linux上发布.NET CORE时不支持EPPLUS ...?或者我们可以做一些不同的事情来让它工作?
1条答案
按热度按时间qacovj5a1#
问题不在于EPPLUS库,而在于Excel模板的文件/路径名的处理。Windows Server对文件/路径名不区分大小写,而Linux则是。
一旦我们的c#代码中的文件夹名称与Linux服务器上的实际文件夹名称(大小写)匹配,Excel导出就开始工作。