大师好!我一直用npoi用的非常爽,还自己总结了一套基础库。但是最近发现了一个问题十分迫切需要解决。如果无法解决的话只有换api了(极不想这么干-_-!!)
我读取xls文件的时候发现,比如表单一共24列(其中有些列没有数据,空着的)。我用example里面的方法循环读取每一行。有些可以认出来是24列,有些只认出来比如17,18列数据。我查看了一下。就是没有数据的单元格被跳过了。这样我就没法通过列号准确获取我需要的数据。
现在的解决办法是必须全部数据选中复制到一个新的表中,然后文字颜色设置为红色,还要加边框。才能解决这个问题。
现在同事怨声载道,觉得这样太麻烦了。请问有更好的方法么?
非常感谢!
哈哈,这个问题我也遇到过,cell没有值时,是读不出来的,不过没关系。
for (int j = row.FirstCellNum; j < cellCount; j++) { dr[j] = row.GetCell(j) == null ? string.Empty : row.GetCell(j).ToString(); }
如果cell没值,row.GetCell(j) == null,就是这个,你赋值为空就行了。
getcell会直接报异常啊
哦,我回忆了下。getcell如果是null加tostring才会报异常。但是这样不合适我啊。比如我想读第17列的数据,因为跳列跑到第15列去了。这样即使是null我可以跳过。但是我仍然无法正确的获得第17列的数据。因为row的column总数因为跳列从假设说有20列,变成15列了。而且这是随机出现的。。说不清到底是哪个位置
@好学的胖纸:
像这种,我那种方式是可以正确获取的。第二行数据列2没数据,获取的就是空的。
谢谢,我也这个问题,你的方法可以解决。感谢感谢
@保安保安: 你找到解决办法了吗?能分享一下吗?
你是不是没有数据的列连表头都没有
有表头的
NPOI 开源的 自己可以根据需要 改改
我想更改读取excel的使用区域,怎么该呀
用ICell的ColumnIndex属性,看看是不是你要的列号
毕竟xls本来就是这样保存数据的,没有数据的那一列不会保存
使用 HSSFRow.GetCell(cellNum),获取后要判断是否为 null
不要使用HSSFRow.Cells[cellNum], Cells属性只返回有值得列
做个列表头,为最大的列。
弄一个模版 把列固定了