首页 新闻 搜索 专区 学院

npoi读取excel 中间未激活的列 后面数据读取不到????

0
[已解决问题] 解决于 2019-12-26 10:14

   IRow row = sheet.GetRow(i);//实际有25列,但是读取到23列,中间两个是未激活的

 

使用npoi 读取客户导入的excel,但是空字符串列可以读取,但是未激活的 ,后面有数据的列也读取不到了,有什么办法吗???

IDOER的主页 IDOER | 初学一级 | 园豆:38
提问于:2019-12-25 18:09
< >
分享
最佳答案
0

这不是行(hang)吗,
你可以通过getlastrow获取最后一行的index,是24
然后for循环去读
中间获取不到的单元格会报空引用异常,注意判断或者直接try catch

奖励园豆:5
猝不及防 | 老鸟四级 |园豆:2003 | 2019-12-26 08:51

恩,兄台说的对 如果24列,中间2个是空的, IRow row = sheet.GetRow(i) 这个是获取到22列,但是新问题来了,我用过for循环读取的时候,组合table的时候,就不无法对应列了,因为他的索引自动靠前了,无法获取真正的列索引了??? 本来最后两列有内容,但是组合table的时候,最后两列反而写到前面去了,这个怎么解决呢?

IDOER | 园豆:38 (初学一级) | 2019-12-26 09:26

@efreer: 大哥,到底是列是行...
行的话, var rowCount = sheet.LastRowNum; 获取了所有行了对吧(25)
每行循环:
//
For(xxxxxx)
{
//获取列
var colCount=row.LastCellNum;
//获取cell
for(xxxx)
{
var cell= row.Cells[i];
if(cell!=null)
{
//to do
}
}
}

讲道理的话我觉得遇不到你这个事情

猝不及防 | 园豆:2003 (老鸟四级) | 2019-12-26 09:37

@猝不及防: 兄弟已经解决了,我这样解决的.

  int rowCount = sheet.LastRowNum;
                    for (int i = startRow; i <= rowCount; ++i)
                    {
                       
                        IRow row = sheet.GetRow(i);
                      

                        if (row == null || row.Cells.Count == 0) continue; //没有数据的行默认是null       

                        DataRow dataRow = data.NewRow();

                        for (int j = row.FirstCellNum; j < cellCount; ++j)
                        {
                            try
                            {
                                //防止中间有未激活的单元格  用row.GetCell(j) != null 判定空最后一个无效,不知道什么原因,所以用try
                                int ColumnIndex = row.Cells[j].ColumnIndex; //获取真正的列索引,防止列混乱,否则对应datatable列错误
                                dataRow[ColumnIndex] = row.Cells[j];
                                //if (row.GetCell(j) != null) //同理,没有数据的单元格都默认是null
                                //    dataRow[j] = row.Cells[j];
                            }
                            catch 
                            { }
                            // Convert.ToDateTime();
                        }

                        data.Rows.Add(dataRow);
                    }
IDOER | 园豆:38 (初学一级) | 2019-12-26 09:44

@efreer: excel真的存在null行吗...这是代码生成的excel把

猝不及防 | 园豆:2003 (老鸟四级) | 2019-12-26 09:46

@猝不及防: 哈哈,空行有可能,用户搞得表格啥情况都有,这个不是问题重点.

我的问题是 中间某行  有几个未激活的单元格,npoi 写到table就混乱了,看我中间的代码 就可以解决了

IDOER | 园豆:38 (初学一级) | 2019-12-26 09:48

@efreer: 请陛下给分

猝不及防 | 园豆:2003 (老鸟四级) | 2019-12-26 10:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册