Java Apache POI读取xlsx NPE
我正在尝试使用问题中的确切代码阅读Excel电子表格。一切正常,但有时我会在这行代码的某些单元格上获得NPE: 为什么呢?在我的工作表中间,有些单元格怎么可能是空的?诚然,我获取NPE的单元格不包含数据。但并不是所有的空细胞都会导致NPE 类似地(如果我在NPE检查中换行),我最终会得到一些明显为空的行:Java Apache POI读取xlsx NPE,java,excel,apache,apache-poi,Java,Excel,Apache,Apache Poi,我正在尝试使用问题中的确切代码阅读Excel电子表格。一切正常,但有时我会在这行代码的某些单元格上获得NPE: 为什么呢?在我的工作表中间,有些单元格怎么可能是空的?诚然,我获取NPE的单元格不包含数据。但并不是所有的空细胞都会导致NPE 类似地(如果我在NPE检查中换行),我最终会得到一些明显为空的行: 再次,这些是我的电子表格中间没有数据的行。但并非所有空行都会导致NPE 显然,在这两种情况下执行null检查可以解决我眼前的问题。我只是想知道为什么对象有时是空的。这一定是有道理的。我就是
再次,这些是我的电子表格中间没有数据的行。但并非所有空行都会导致NPE
显然,在这两种情况下执行null检查可以解决我眼前的问题。我只是想知道为什么对象有时是空的。这一定是有道理的。我就是看不出来谢谢。不必为所有行设置
行
对象。试想一下,当您在Excel中启动一个新的电子表格时,最多可以有1048576行,但保存一个空的电子表格会导致文件大小变小。也就是说,对不存在的行的引用将导致一个绝对巨大的文件。对行的引用只应在存在与行相关联的某种内容(任何单元格值、格式、边框等)的情况下存储。行可能显示为空,但具有某种格式,或者可能过去包含的内容现在已不存在。行中的单元格
s也有类似的参数。对于未使用的单元格,没有理由使用单元格
引用。但是您可以删除单元格
的内容,而不必删除单元格
本身;它可以是单元格\u类型\u空白
单元格
如果它从未存在过,那么它将是null
。即使它没有内容,也可能有需要表示的格式,因此它不会是null
。如果它以前有内容或格式,那么它就不会是null
,除非有人在Excel中用右键单击->删除或在POI中用removeCell
或removow
显式删除它
如果行没有任何内容,那么它可以是null
。正如您所提到的,在访问之前,您可以始终检查getRow
返回的行是否为null
,并且在访问之前,您可以始终检查getCell
返回的单元格是否为null
。您还可以提供行.MissingCellPolicy
来控制该方法的行为CREATE\u NULL\u AS\u BLANK
将为您创建单元格(如果该单元格不存在)。想象一下,一个行有16384个单元格
,通常最多只需要几个
(还有其他缺少的单元格策略。RETURN\u BLANK\u,因为\u NULL
的作用正好相反;如果它存在但为空,则将返回NULL
。默认值为RETURN\u NULL\u和\u BLANK
,只返回存在的内容,而无需任何其他操作。)谢谢,这是有意义的。由于我无法控制接收的电子表格,因此在检索行或单元格后,我将执行空检查。
String value = cell.toString();
XSSFRow row = ws.getRow(i);