已解决:ASP.NET Linux 上的 CORE 和 EPPLUS 库 - IndexOutOfRangeException:工作表位置超出范围

Solved: ASP.NET CORE and EPPLUS library on Linux - IndexOutOfRangeException: Worksheet position out of range

请注意,我发现了几个存在此问题的主题(EPPLUS IndexOutOfRangeException:工作表位置超出范围。),但 none 仅特定于 Linux 发布。

我们有一个带有 EPPlus 5.1.2 库的 ASP.NET CORE 3.1 网络项目。

对于某些报告,我们打开一个预先存在的 Excel 模板 (.xlsx),在其中填充一些数据,然后 return 供用户下载。调试时或当我们将 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...?还是我们可以做一些不同的事情来让它发挥作用?

问题不在于 EPPLUS 库,而在于处理 Excel 模板的 file/path 名称。 Windows 服务器对 file/path 名称不区分大小写,另一方面,Linux 区分大小写。

一旦我们的 c# 代码中的文件夹名称(大小写)与 Linux 服务器上的实际文件夹名称相匹配,Excel 导出就开始工作了。