NPOI - 加载 Excel 文件导致错误的本地 header 签名:0xE011CFD0

NPOI - Loading an Excel file causes Wrong Local header signature: 0xE011CFD0

有谁知道可能导致此错误的原因

'Wrong Local header signature: 0xE011CFD0'

var path = @"C:\Excel.xls";

using (var fs = File.OpenRead(path))
{
    var wb = new XSSFWorkbook(fs);
}

我正在使用:https://github.com/dotnetcore/NPOI

好的,我找到了解决方案:

将 Excel 文件另存为 .xlsx 但没有宏或 .xlsm 并且有效

留下这个以防其他人路过这里。

.xls 是旧的 Excel 格式。使用该格式,您应该创建一个新的 HSSFWorkbook 实例。 XSSFWorkbook 与新的 .xlsx 格式一起使用。

这两种类型都实现了 IWorkbook 接口,因此您可以围绕该接口构建代码并在运行时确定工作簿实例的类型。

我创建了一个简单的 Excel 组件,这里是构造函数:

private readonly bool _useOldExcelFormat;
private readonly IWorkbook _workbook;

public NpoiExcelManager(bool useOldExcelFormat = false)
{
    _useOldExcelFormat= useOldExcelFormat;
    if (_useOldExcelFormat)
    {
        _workbook = new HSSFWorkbook();
    }
    else
    {
        _workbook = new XSSFWorkbook();
    }
}

您会发现 HSSFWorkbookXSSFWorkbook 之间存在一些差异,因此有时您必须为每个实现编写特定代码,但这种情况非常罕见。

我会说大约 95% 的 IWorkbook 接口都适用于这两种实现。