【问题标题】:When does Apache POI framework consider a excel cell as empty and null?Apache POI 框架何时将 excel 单元格视为空和 null?
【发布时间】:2021-07-09 06:33:44
【问题描述】:

我在 java 中的 apache POI 框架的帮助下处理 excel 表上传。我在填充的列之间插入了一个空列,在某些文件中该特定列的单元格被视为空,而在某些文件中,列中的空单元格被视为空字符串?为什么会这样?我使用谷歌表格在 excel 中插入了一个空列。

另外,为了理解这个问题,考虑使用我们在row.getCell() 方法中使用的Row.CREATE_NULL_AS_BLANK 缺失策略。 excel工作表什么时候我们可以使用这个缺失策略的单元格有空值?

【问题讨论】:

    标签: java excel google-sheets apache-poi


    【解决方案1】:

    在存储工作表的Excel 文件中,如果行和单元格具有值或设置,则仅存储它们。不存储其他行和单元格。否则,即使不使用这些行和单元格,每个工作表都必须存储所有可能的行和单元格。那会浪费文件内存。

    如果行包含具有值或设置的单元格,则它们具有值。如果行具有与默认值不同的行样式或特殊行高,则行具有设置。

    如果单元格设置了单元格值,则单元格具有值。如果单元格具有单元格样式,则单元格具有设置。

    也可能存储单元格,即使它们完全空白且没有样式。这取决于使用的电子表格软件。这主要发生在单元格存在然后被删除或单元格被复制/粘贴时。

    apache poiSheet.getRowRow.getCell 方法不会将行或单元格存储为 null。换句话说,只有存储的行和单元格不是null。所以你总是需要在Sheet.getRowRow.getCell之后检查null

    ...
    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 cell 而不是 null

    对于Cell,您也可以使用Row.getCell(int cellnum, Row.MissingCellPolicy policy)。请参阅 (Row.MissingCellPolicy)。

    还有CellUtil 提供方法CellUtil.getRow(int rowIndex, Sheet sheet)CellUtil.getCell(Row row, int columnIndex)。如果无法获取,则两者都在创建行或单元格。

    如果您只需要遍历填充的行和单元格,那么您可以使用 Iterate over rows and cells 中描述的迭代器。迭代器永远不会有null 行或单元格。但是,您可能会错过完全空白的行或跳过行中的空白单元格。为了避免这种情况,请阅读下面的“迭代单元格,控制缺失/空白单元格”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多