java——什么时候Apache POI框架认为Excel单元格是空的和空的?

sdnqo3pr  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(646)

我在java中的ApachePOI框架的帮助下进行excel工作表上传。我在填充的列之间插入了一个空列,在某些文件中,该列的单元格被视为null,而在某些文件中,列中的空单元格被视为空字符串?为什么会这样?我使用谷歌表格在excel中插入了一个空列。
另外,为了理解这个问题,考虑使用 Row.CREATE_NULL_AS_BLANK 缺少我们在中使用的策略 row.getCell() 方法。excel工作表什么时候有空值的单元格,我们可以使用这个缺少的策略?

wnvonmuf

wnvonmuf1#

在一个 Excel 图纸存储中的文件只有行和单元格具有值或设置时才会存储。不存储其他行和单元格。否则,即使未使用这些行和单元格,每个工作表也必须始终存储所有可能的行和单元格。那会浪费文件内存。
如果行包含具有值或设置的单元格,则行具有值。如果行具有不同于默认值的行样式或特殊行高,则行具有设置。
如果设置了单元格值,则单元格具有值。如果单元具有单元样式,则它们具有设置。
也可能是即使单元格完全为空且没有样式,也会存储这些单元格。这取决于所使用的电子表格软件。这主要发生在单元格出现后被删除或复制/粘贴单元格时。
这个 Sheet.getRowRow.getCell 方法 apache poi 获取未存储的行或单元格作为 null . 换句话说,只获取存储的行和单元格 null . 所以你总是需要检查 null 之后 Sheet.getRowRow.getCell :

...
Row row = sheet.getRow(3); if (row == null) row = sheet.createRow(3);
Cell cell = row.getCell(3); if (cell == null) cell = row.createCell(3);
...

在那之后,你可以确信 Row rowCell cellnull .
对于 Cell 你也可以使用 Row.getCell(int cellnum, Row.MissingCellPolicy policy) . 请参阅(第行。丢失单元策略)。
还有cellutil,它提供方法 CellUtil.getRow(int rowIndex, Sheet sheet)CellUtil.getCell(Row row, int columnIndex) . 如果无法获取行或单元格,则两者都在创建行或单元格。
如果只需要遍历已填充的行和单元格,则可以使用迭代器,如迭代行和单元格中所述。迭代器从来没有 null 行或单元格。但是,您可能会错过完全空白的行或跳过行中的空白单元格。为了避免这种情况,请阅读下面的“迭代单元格,控制丢失/空白单元格”。

相关问题