apache poi - 从空白和缺失(null)单元格中读取注释

时间:2013-03-04 13:29:11

标签: java null comments apache-poi cell

我正在尝试从所有Excel文档单元格中读取注释(使用Apache POI)。 空(或缺少)单元格包含注释时出现问题。

目前我找到的解决方案只有:

  • 迭代每一行,最后不是空列
  • 获取所有(甚至是空的)单元格
  • 检查单元格的注释是否为空
  • 如果为真:处理评论

一些代码:

if (row != null) {
  cell = row.getCell(cellNum, Row.CREATE_NULL_AS_BLANK);
  cellComment = cell.getCellComment();
  if (cellComment != null)
    ...
}

主要问题是我无法读取空行和注释的注释,这些注释最后不是空单元格。 提高性能(与读取所有行单元格相比)会很好,但重点是阅读所有文档注释。

2 个答案:

答案 0 :(得分:0)

您可以使用missingCellPolicy row.getCell(int cellnum, MissingCellPolicy policy)读取空白单元格或空单元格的注释,它允许您处理空白或空的单元格。

例如,在你的工作表中,假设第7行是空白的,其第5行有一些注释(比如“Hello”),你需要阅读该注释。只需执行以下操作:

 Comment comment = sheet.getRow(7).getCell(5, Row.CREATE_NULL_AS_BLANK).getCellComment();

 System.out.println(comment.getString());

将打印“你好”。

答案 1 :(得分:0)

对于正在使用Apache POI并尝试执行OP所需的所有烈士:使用sheet.getCellComments()方法 - 它返回一个TreeMap,其中的键是CellAddress&es;而值是Comment实例,即使处理的单元格也是如此它们是空的或缺失。

要使POI迭代器看到这种单元格,只需使用MissingRowPolicy.CREATE_NULL_AS_BLANK询问getCell方法。

e.g。 (对于Java 1.8 +):

sheet.getCellComments().forEach((cellAddress, o) ->
             sheet.getRow(cellAddress.getRow()).getCell(cellAddress.getColumn()
                        , Row.MissingCellPolicy.CREATE_NULL_AS_BLANK));