首页 新闻 会员 周边 捐助

NPOI打开excel报0x41C错误

0
[已解决问题] 解决于 2023-09-18 17:05

我使用C#里面的NPOI库打开一个excel文件,结果总是报告

解析Excle文件
Wrong Local header signature: 0x41C

错误。拿着这个错误在网上搜索了半天,没有一个是0x41C的,请问谁知道这个错误怎么解决吗?
Excel文件是 .xlsx 格式使用office是可以打开的。
打开的代码

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.HPSF;



file = new FileStream(fileName, FileMode.Open, FileAccess.Read);
if (0 < fileName.IndexOf(".xlsx"))
{
    // 2007+
    workbook = new XSSFWorkbook(file);
}
else if (0 < fileName.IndexOf(".xls"))
{
    // 2003
    workbook = new HSSFWorkbook(file);
}
else
{
    return;
}
-ssdq-的主页 -ssdq- | 菜鸟二级 | 园豆:205
提问于:2023-09-01 12:07
< >
分享
最佳答案
0

试试把文件另存为一遍之后再读取

奖励园豆:5
复制粘贴机器人 | 小虾三级 |园豆:720 | 2023-09-01 13:28

另存为之后倒是可以的,但是每次都要求先把文件另存为一次似乎也说不过去呀。

-ssdq- | 园豆:205 (菜鸟二级) | 2023-09-01 14:12

@cnblogs_lei:
我先说结论:原因在于文件真正的类型和文件后缀名不匹配
你的.xlsx文件能通过office打开,但实际上这个文件真正的类型不是.xlsx(可能是.xls, .csv等等其他能用office打开的excel文件,只是通过重命名改成的.xlsx),但是你的代码又是通过文件名后缀来判断用哪个workbook的,由于真正的类型不是.xlsx所以才报错。另存为是office把这个文件转换成了真正的.xlsx文件。

复制粘贴机器人 | 园豆:720 (小虾三级) | 2023-09-01 14:17

@复制粘贴机器人: 我明白你的意思了。我尝试将文件重命名为 .xls 之后也是打开失败了,重命名为 .csv 之后使用notepad++打开直接是乱码的。那可能还是其他的什么被excel支持的数据格式。
这个文件是从小米的IOT后台导出来的记录文件,也不知道他们实际用的什么格式最终保存为 .xlsx 了,我本地只是想做个工具来方便我们内部解析、查看数据而已。

-ssdq- | 园豆:205 (菜鸟二级) | 2023-09-01 14:31

@cnblogs_lei: https://github.com/nissl-lab/npoi/issues/1150
能否提供下你项目里bin目录下的ICSharpCode.SharpZipLib.dll的文件版本

复制粘贴机器人 | 园豆:720 (小虾三级) | 2023-09-05 16:12
其他回答(4)
0

理论上这些文件格式都有可能,可以一个个新建文件试一下看是哪种文件类型报41C

二次元攻城狮 | 园豆:462 (菜鸟二级) | 2023-09-01 17:21

将文件对照了进行各种后缀名的重命名,然后去执行解析:

try 
{
	file = new FileStream(fileName, FileMode.Open, FileAccess.Read);
	// 直接先按照2007+打开,然后尝试2003
	try
	{
		Console.WriteLine("excel 2007");
		workbook = new XSSFWorkbook(file);
	}
	catch(Exception e)
	{
		Console.WriteLine(e.Message);
		Console.WriteLine("excel 2003");
		workbook = new HSSFWorkbook(file);
	}
catch(Exception ex)
{
	Console.WriteLine(ex.Message);
}

实际上会报错:

解析Excle文件
excel 2007
Wrong Local header signature: 0x41C
excel 2003
Invalid header signature; read 0xBDC70600B80BE308, expected 0xE11AB1A1E011CFD0 - Your file appears not to be a valid OLE2 document
支持(0) 反对(0) -ssdq- | 园豆:205 (菜鸟二级) | 2023-09-04 11:23
0

升级 NPOI 版本。某些旧版本的 NPOI 可能在读取 .xlsx 文件时存在一些 bug。尝试将 NPOI 更新到最新版本,以确保使用了修复了这个问题的版本。

Постой! | 园豆:1084 (小虾三级) | 2023-09-05 14:59

NPOI的版本是最新的了。实在搞不定,到网上找了下,使用 EPPlus 这个库就行了。
C#读写Excel的四种方案

支持(0) 反对(0) -ssdq- | 园豆:205 (菜鸟二级) | 2023-09-11 11:49
0

参考网上的介绍C#读写Excel的4种方案,使用 EPPlus 这个库就好了,这个库好用。

-ssdq- | 园豆:205 (菜鸟二级) | 2023-09-11 11:51
0

xlsx 类型的时候获取IWorkbook 对象是不要使用流进行创建,直接使用文件路径进行创建即可解决

念月_xy | 园豆:202 (菜鸟二级) | 2024-09-12 17:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册