首页 > 解决方案 > NPOI - 加载 Excel 文件会导致错误的本地标头签名:0xE011CFD0

问题描述

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

'错误的本地标头签名:0xE011CFD0'

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

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

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

标签: c#excel.net-corenpoi

解决方案


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

.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接口适用于这两种实现。


推荐阅读