当前位置: 首页 > 知识库问答 >
问题:

使用SXSSF(APACHE POI)和添加注释不能生成正确的excel文件

云默
2023-03-14

实际代码:

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

共有1个答案

宋成天
2023-03-14

我也遇到了同样的问题,并通过在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()方法的源代码,我发现了这个解决方案sxssfcell中的相应方法不设置行或列。

 类似资料:
  • 我一直在使用 annox 在我的 jaxb 生成的类上添加注释(通过绑定文件),但我找不到直接在包上添加注释的方法(包信息.java)。 我一直在尝试在bindings.xml中这样做: 但是jaxb抱怨说< code>annox:annotate不应该在那里。 还有别的方法吗?

  • 我在使用gradlew(4.10.2)+dagger(2.18)时遇到了一个奇怪的问题。 问题是当我打电话的时候: /commonmodule_providesgsonFactory.java:6:错误:包javax.annotation.processing不存在导入javax.annotation.processing.generated; /commonmodule_providesgson

  • 我使用openapi生成器(5.4.0)和gradle(7.3.3)以及SpringBoot (2.6.6)。 我的OpenApi配置: 我的目标是在字段上添加@lombok. Builder.默认注释。 根据这个:链接到例子我试着在我的规范中使用x-field-extra-annotation:但是它在我的例子中不起作用。 就我而言,它的工作原理是这样的; < li>x-extra-annota

  • 我正在尝试使用Spring 4实现REST服务。 该应用程序使用Java 7构建,并在Tomcat 7上运行。 REST方法将返回JSON格式的customer对象。应用程序是注释驱动的。 Customer类有JAXB注释。Jackson罐子出现在课堂路径中。据我所知,Jackson将使用JAXB注释生成JSON。 客户类别: 我已经将REST服务类注释为@RestController(根据Spr

  • 我在项目中使用声明性服务注释和gradle。 我已经在我的组件类中指定了相应的注释(@组件等)。我还在gradle文件中添加了felix scr注释项目的依赖项。但是,当我构建项目时,组件xml文件不会生成,清单中的Service-Component标头也不会生成。MF文件。 我在gradle中使用“osgi”插件来生成osgi包。 gradle提供这种支持吗?在maven中,可以使用maven

  • 当使用matplotlibs函数时,我遇到了一个奇怪的行为。 我想给一个文件的绘图添加注释,,其中包含: 使用以下代码: 这让我得到了下面这个看起来很奇怪的图,到处都是轴标签,注释在错误的地方(相对于我的数据): 然而,当我使用 而不是 所以我想在一个例子中,使用以前的轴(也用于制作注释),但这会给我一个警告,而在另一种情况下,它会生成一个新的轴实例(因此没有警告),但也会生成一个带有两个重叠轴的