使用SXSSF(APACHE POI)并添加注释不会生成适当的excel文件

我有问题使用SXSSF poi api生成有效的xlsx文件。 下面的代码生成适当的excel文件,如果我使用:工作簿wb = new XSSFWorkbook(); 但如果我使用:SXSSFWorkbook wb = new SXSSFWorkbook(100);

错误:删除logging:来自/xl/comments1.xml部分的评论(评论)

请帮我理解代码有什么问题。 我正在寻找与使用SXSSF API的单元格注释生成一个Excel文件。

实际代码:

public static void main(String[] args) throws Exception { // Workbook wb = new XSSFWorkbook(); SXSSFWorkbook wb = new SXSSFWorkbook(100); Sheet sh = wb.createSheet(); for(int rownum = 0; rownum < 1000; rownum++){ Row row = sh.createRow(rownum); for(int cellnum = 0; cellnum < 10; cellnum++){ Cell cell = row.createCell(cellnum); String address = new CellReference(cell).formatAsString(); cell.setCellValue(address); setCellComment(cell,address); } } FileOutputStream out = new FileOutputStream("comments.xlsx"); wb.write(out); out.close(); } protected static void setCellComment(Cell cell, String message) { Drawing drawing = cell.getSheet().createDrawingPatriarch(); CreationHelper factory = cell.getSheet().getWorkbook() .getCreationHelper(); // When the comment box is visible, have it show in a 1x3 space ClientAnchor anchor = factory.createClientAnchor(); anchor.setCol1(cell.getColumnIndex()); anchor.setCol2(cell.getColumnIndex() + 1); anchor.setRow1(cell.getRowIndex()); anchor.setRow2(cell.getRowIndex() + 1); anchor.setDx1(100); anchor.setDx2(100); anchor.setDy1(100); anchor.setDy2(100); // Create the comment and set the text+author Comment comment = drawing.createCellComment(anchor); RichTextString str = factory.createRichTextString(message); comment.setString(str); comment.setAuthor("Apache POI"); // Assign the comment to the cell cell.setCellComment(comment); } 

我有同样的问题,并通过设置Comment的行和列属性来解决它。

在你的例子中修改setCellComment()方法如下,可以解决这个问题。

 protected static void setCellComment(Cell cell, String message) { ... // Create the comment and set the text+author Comment comment = drawing.createCellComment(anchor); RichTextString str = factory.createRichTextString(message); comment.setString(str); comment.setAuthor("Apache POI"); // Set the row and column here comment.setRow(cell.getRowIndex()); comment.setColumn(cell.getColumnIndex()); // Assign the comment to the cell cell.setCellComment(comment); } 

我通过查看XSSFCell类中setCellComment()方法的来源,发现了这个解决scheme。 SXSSFCell中的相应方法不会设置行或列。