NPOI读取Excel遇到的坑

时间:2022-06-09 05:43:09

NPOI是POI的.NET版本。POI是用Java写成的库,能帮助用户在没有安装Office环境下读取Office2003-2007文件。NPOI在.NET环境下使用,能读写Excel/Word文件。在实际项目中,通常是对Excel表格的处理,这方面的教程网上已经很多了,稍微搜索一下就能上手使用。这里记录一下我使用NPOI读取Excel数据遇到的一个坑。

当我把本地调试正常的程序发给用户测试时,读取某一个Excel表格时出现了“未将对象引用设置到对象的实例”这个错误。为了找出bug我用用户测试的Excel进行调试,发现在读取Excel行数时,实际有数据的行数为2,但程序读取为3行。也就是说有一行是空行,但是程序仍认为其有数据,并且row!=null也无法判断。代码如下:

int rowCount = sheet.LastRowNum;
for (int i = (sheet.FirstRowNum + 1); i <= rowCount; i++) //从第二行开始读数据
{
IRow row = sheet.GetRow(i);
if(row != null)
{
//读取数据
}
}

后面我测试了一下,在Excel中对整行执行“清空数据”的操作时就会造成这个现象,“删除”整行则不会。而在Excel生产过程中,无法保证用户不使用“清空数据”这个操作。那么只能在程序中进行空行的判断。然而百度、Google了一圈,也没发现有什么可以直接判断出为空行的方法。似乎只有使用最原始的循环一行的每一个cell,判断是否都为空来判定是否为空行。如果cell满足一下条件,即表示有数据。

if(cell !=null && cell.CellType != CellType.Blank && string.IsNullOrEmpyt(cell.ToString().Trim()))

不知道还有没有更好的方法解决这个问题,如果有哪位大神知道的话还请留言。