使用apache-poi自动调整excel评论

时间:2015-01-15 09:58:30

标签: apache-poi

我们有很多由apache poi生成的excel报告。其中一些包含标题中的注释。由于许多报告,我们希望创建用于添加注释的通用解决方案。我们注意到可以通过以下代码将注释添加到单元格中:

public static void addComment(final Workbook workbook, final Sheet sheet, final Cell cell, final Row row,
        final String comment) {

    final CreationHelper factory = workbook.getCreationHelper();

    final Drawing drawing = sheet.createDrawingPatriarch();

    final ClientAnchor anchor = factory.createClientAnchor();
    anchor.setCol1(cell.getColumnIndex());
    anchor.setCol2(cell.getColumnIndex() + 3);
    anchor.setRow1(row.getRowNum());
    anchor.setRow2(row.getRowNum() + 5);

    final Comment cellComment = drawing.createCellComment(anchor);
    final RichTextString richText = factory.createRichTextString(comment);
    cellComment.setString(richText);
    cell.setCellComment(cellComment);
}

我们还注意到注释框大小可以使用列/行索引设置 - 这是我们的主要问题,因为如果第一列有100px而第二列有1000px则注释宽度将是1000px。这是我们的问题 - 是否有可能使用apache poi设置带像素的注释大小而不是列/行索引?或者也许有一些方法可以用apache poi自动计算评论大小?

1 个答案:

答案 0 :(得分:0)

ClientAnchor支持偏移,至少具体实现如下:

public XSSFClientAnchor(int dx1, int dy1, int dx2, int dy2, int col1, int row1, int col2, int row2)

dx1偏离左边,dx2偏离右边,dy1偏离顶部,dy2偏离底部(col1,row1是行col,col2,row2是结束col,非包含)

因此,要减小宽度,只需为dx2指定非零值。

dx1,dx2,dy1和dy2是英制公制单位(EMU)。每个EMU有9525个像素,因此您必须使用相当大的值。