0

我正在尝试从所有 Excel 文档单元格中读取注释(使用 Apache POI)。当空(或缺失)单元格包含评论时,我遇到了问题。

目前我发现的唯一解决方案是:

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

一些代码:

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

主要问题是我无法从空行和最后一个非空单元格之后的评论中读取评论。提高性能(与读取所有行单元格相比)会很好,但重点是读取所有文档注释。

4

2 回答 2

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());

将打印“你好”。

于 2013-07-11T01:06:56.770 回答
0

对于所有使用 Apache POI 并尝试做 OP 想要的事情的烈士:使用 sheet.getCellComments() 方法 - 它返回一个 TreeMap,其中键是 CellAddress 并且值是 Comment 实例,即使处理它们的单元格为空或缺失.

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

例如(对于 Java 1.8+):

sheet.getCellComments().forEach((cellAddress, o) ->
             sheet.getRow(cellAddress.getRow()).getCell(cellAddress.getColumn()
                        , Row.MissingCellPolicy.CREATE_NULL_AS_BLANK));
于 2018-03-16T13:56:39.850 回答