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);
}
好的,我找到了解决方案:
将 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();
}
}
您会发现 HSSFWorkbook
和 XSSFWorkbook
之间存在一些差异,因此有时您必须为每个实现编写特定代码,但这种情况非常罕见。
我会说大约 95% 的 IWorkbook
接口都适用于这两种实现。
有谁知道可能导致此错误的原因
'Wrong Local header signature: 0xE011CFD0'
var path = @"C:\Excel.xls";
using (var fs = File.OpenRead(path))
{
var wb = new XSSFWorkbook(fs);
}
好的,我找到了解决方案:
将 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();
}
}
您会发现 HSSFWorkbook
和 XSSFWorkbook
之间存在一些差异,因此有时您必须为每个实现编写特定代码,但这种情况非常罕见。
我会说大约 95% 的 IWorkbook
接口都适用于这两种实现。