首页新闻找找看学习计划

NPOI读取excel会跳列,谁能分析下呢。万分感谢

0
悬赏园豆:100 [已解决问题] 解决于 2014-09-05 12:22

大师好!我一直用npoi用的非常爽,还自己总结了一套基础库。但是最近发现了一个问题十分迫切需要解决。如果无法解决的话只有换api了(极不想这么干-_-!!)

我读取xls文件的时候发现,比如表单一共24列(其中有些列没有数据,空着的)。我用example里面的方法循环读取每一行。有些可以认出来是24列,有些只认出来比如17,18列数据。我查看了一下。就是没有数据的单元格被跳过了。这样我就没法通过列号准确获取我需要的数据。

现在的解决办法是必须全部数据选中复制到一个新的表中,然后文字颜色设置为红色,还要加边框。才能解决这个问题。

现在同事怨声载道,觉得这样太麻烦了。请问有更好的方法么?
非常感谢!

保安保安的主页 保安保安 | 初学一级 | 园豆:96
提问于:2014-03-21 13:34
< >
分享
最佳答案
0

哈哈,这个问题我也遇到过,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,就是这个,你赋值为空就行了。

收获园豆:100
Engineer | 初学一级 |园豆:131 | 2014-03-24 16:50

getcell会直接报异常啊

保安保安 | 园豆:96 (初学一级) | 2014-03-25 14:18

哦,我回忆了下。getcell如果是null加tostring才会报异常。但是这样不合适我啊。比如我想读第17列的数据,因为跳列跑到第15列去了。这样即使是null我可以跳过。但是我仍然无法正确的获得第17列的数据。因为row的column总数因为跳列从假设说有20列,变成15列了。而且这是随机出现的。。说不清到底是哪个位置

保安保安 | 园豆:96 (初学一级) | 2014-03-25 14:22

@好学的胖纸: 

像这种,我那种方式是可以正确获取的。第二行数据列2没数据,获取的就是空的。

Engineer | 园豆:131 (初学一级) | 2014-03-25 15:21

谢谢,我也这个问题,你的方法可以解决。感谢感谢

Bobby_Mei | 园豆:165 (初学一级) | 2015-10-13 16:20

@保安保安: 你找到解决办法了吗?能分享一下吗?

jiangjunyan | 园豆:200 (初学一级) | 2016-11-12 11:57
其他回答(6)
0

你是不是没有数据的列连表头都没有

MinKong | 园豆:202 (菜鸟二级) | 2014-03-21 14:52

有表头的

支持(0) 反对(0) 保安保安 | 园豆:96 (初学一级) | 2014-03-25 14:20
0

NPOI 开源的 自己可以根据需要 改改

Yu | 园豆:12944 (专家六级) | 2014-03-21 16:50

我想更改读取excel的使用区域,怎么该呀

支持(0) 反对(0) jiangjunyan | 园豆:200 (初学一级) | 2016-11-12 11:58
0

用ICell的ColumnIndex属性,看看是不是你要的列号

毕竟xls本来就是这样保存数据的,没有数据的那一列不会保存

诶碧司 | 园豆:1912 (小虾三级) | 2014-03-21 19:17
0

使用 HSSFRow.GetCell(cellNum),获取后要判断是否为 null

不要使用HSSFRow.Cells[cellNum],  Cells属性只返回有值得列

火凌风 | 园豆:207 (菜鸟二级) | 2014-03-21 22:35
0

做个列表头,为最大的列。

20121221 | 园豆:201 (菜鸟二级) | 2014-03-22 08:49
0

弄一个模版 把列固定了

wolfy | 园豆:2636 (老鸟四级) | 2014-03-22 18:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册