我正在尝试从所有Excel文档单元格中读取注释(使用Apache POI)。 空(或缺少)单元格包含注释时出现问题。
目前我找到的解决方案只有:
一些代码:
if (row != null) {
cell = row.getCell(cellNum, Row.CREATE_NULL_AS_BLANK);
cellComment = cell.getCellComment();
if (cellComment != null)
...
}
主要问题是我无法读取空行和注释的注释,这些注释最后不是空单元格。 提高性能(与读取所有行单元格相比)会很好,但重点是阅读所有文档注释。
答案 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));