用 Visual Studio 2022编写一个Excel文件读写的程序,为了编写方便,就计划引用 NPOI库。
在一开始的调试过程中,程序可以正常运行,但是多测试几个Excel文件的时候,就会报错,错误的内容是“未将对象引用设置到对象的实例”。
上网查询资料,其原因是用户在使用Excel的是,需要删除掉某一个单元格或是行或列的时候,有的人会选择删除行、列、单元格。有的人是按del删除单元格内容。不同的删除方式,在Excel存储的时候数据是不一样的。在用NPOI读取Excel文件的时候,遍历到某一个行的时候,这一行什么都没有,然后就会引发错误。
dr[j] = GetValueType(sheet.GetRow(i).GetCell(j));
或者这样的
header = sheet.GetRow(sheet.FirstRowNum + i);
if (ColMax <header.LastCellNum)
{
ColMax = header.LastCellNum;
}
读取LastCellNum的时候,就会引发错误,用 try/catch都不能拦截。
因为这样的一行是什么都没有的,是“空”的,所以尝试这样的操作:
try
{
header = sheet.GetRow(sheet.FirstRowNum + i);
if( header.Any())
{
if (ColMax <header.LastCellNum)
{
ColMax = header.LastCellNum;
}
}
}
catch (Exception)
{
//throw ;
MessageBox.Show("哇,出错了");
}
增加了 any()判断,这样的判断仍然会引发异常,但是这样的异常已经可以被try捕捉并处理