IRow row = sheet.GetRow(i);//实际有25列,但是读取到23列,中间两个是未激活的
使用npoi 读取客户导入的excel,但是空字符串列可以读取,但是未激活的 ,后面有数据的列也读取不到了,有什么办法吗???
这不是行(hang)吗,
你可以通过getlastrow获取最后一行的index,是24
然后for循环去读
中间获取不到的单元格会报空引用异常,注意判断或者直接try catch
恩,兄台说的对 如果24列,中间2个是空的, IRow row = sheet.GetRow(i) 这个是获取到22列,但是新问题来了,我用过for循环读取的时候,组合table的时候,就不无法对应列了,因为他的索引自动靠前了,无法获取真正的列索引了??? 本来最后两列有内容,但是组合table的时候,最后两列反而写到前面去了,这个怎么解决呢?
@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
}
}
}
讲道理的话我觉得遇不到你这个事情
@猝不及防: 兄弟已经解决了,我这样解决的.
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); }
@efreer: excel真的存在null行吗...这是代码生成的excel把
@猝不及防: 哈哈,空行有可能,用户搞得表格啥情况都有,这个不是问题重点.
我的问题是 中间某行 有几个未激活的单元格,npoi 写到table就混乱了,看我中间的代码 就可以解决了
@efreer: 请陛下给分