首先应该是这样:
HSSFWorkbook workbook2; //读取2003格式 .xls
XSSFWorkbook workbook1; //读取2007格式 .xlsx
我用HSSFWorkbook workbook2; //读取2003格式 .xls开发是没问题的,换成XSSFWorkbook workbook1; //读取2007格式 .xlsx的时候才出问题的。
对的,我注释写反了。
问下有没有具体弹出什么错误吗?给你个简单的读取示例:
XSSFWorkbook workbook;
string path=Environment.GetFolderPath(Environment.SpecialFolder.Personal)+"**.xlsx";
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);
workbook = new XSSFWorkbook(fs);
sheet = workbook.GetSheetAt(0);
我的NPOI是2.0.6.0的找不到FileStream我用MemoryStream.
弹出的错误是如图。
FileStream是System.IO提供的,和NPOI没有关系。
根据你这个错误提示,我发现是你的Excel文档应该是有问题的,excel的头文件不对,NPOI不识别
解决办法是另存为.xlsx再尝试
另存为的话解决问题的根源,生成后第一次打开就就有这个提示。
点击是也可以继续打开表格的,但这样下去不是问题,我想知道是什么原因导致的。
你所说的头文件不对,我有点不太清楚。能否再具体点。
excel由第三方工具导出的话经常遇到这种不规范结果,导致NPOI读取不了
不规范的excel现在还无法直接修改其头文件,导致现在这个问题仍旧搁置中,我曾经也困扰了很长一段时间。
目前可以考虑的方法有2个:
-
将第三方导出的excel规范化(一般第三方工具都是不可控的)
-
绕开第三方工具生成的excel,直接获取其数据源/数据库
我以前是通过第2个方法,直接读取源数据,分析,然后得出自己的excel
只能帮你到这里了,切忌不要再花过多时间在如何修改头文件了,目前不可行。
用这个HSSFWorkbook workbook2; //读取2003格式 .xls倒是不会不会有以上的错误提示。
但是分页布局时候不管数据多少都只是分为一页,有没有什么属性可以设置自动分页。
倒是不会不会有以上的错误提示。
如果不出现这个错误提示的话,那么原始数据表应该是xls。而xlsx打开出错是因为直接修改了后缀名,而没有另存为导致的
分页布局
这个词我不是太清楚你具体指什么,是读取多个工作簿的sheet的意思吗?
sheet = workbook.GetSheetAt(0);
上面的0就是读取第一个sheet,读取哪个可以修改下。
如果读取的该sheet行数过多,可以将Sheet表赋值给dataTable,设置一个行数限制,分别显示出来
xls跟xlsx这个的另存为方式不一样吗。
另存为执行方式一样
本回答被网友采纳