Apache POI如何在Excel中添加注释

3

我需要在Excel的HSSF单元格中添加注释。第一次运行时一切正常,但是如果我打开相同的文件并再次运行代码,它会破坏文件。

我还注意到,我只需要在工作表上创建一个Drawing对象:

_sheet.createDrawingPatriarch();

如果上面的行被执行多次,则注释将无法使用。

那么有人尝试过向单元格添加注释、关闭文件、再次打开文件,并尝试向不同单元格添加更多注释吗?

下面的代码可行,但如果我再次打开文件,就无法添加注释,而且文件会损坏!!!

是否有一种方法可以从工作表中获取现有的Drawing对象?

欢迎任何想法。谢谢!!

_drawing = (HSSFPatriarch) _sheet.createDrawingPatriarch();

Row row = _sheet.getRow(rowIndex_);
Cell cell = row.getCell(0);
CreationHelper factory = _workbook.getCreationHelper();

HSSFAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short)4, 2, (short)6, 5);
        org.apache.poi.ss.usermodel.Comment comment = _drawing.createComment(anchor);
RichTextString str = factory.createRichTextString("Hello, World "+rowIndex_);
comment.setString(str);

  cell.setCellComment(comment);

+1。这个代码示例填写了所有与注释相关的空白;网站文档中的示例无法工作。谢谢! - RMorrisey
1个回答

2
免责声明:我对此没有特别的经验。
然而,我注意到createDrawingPatriarch()的Javadoc指出它将销毁任何以前的图形(包括评论,因为评论似乎存储为图画祖先的一部分)。你是否尝试过首先检查文档是否有一个绘图祖先,并仅在没有时创建它,例如:
HSSFPatriarch drawing = document.getDrawingPatriarch()
if (drawing == null)
    drawing = document.createDrawingPatriarch()

似乎仍然有些脆弱,因为getDrawingPatriarch()文档中的注释,但我猜想它可能适用于您的用例。

好吧,它确实做了警告所说的事情。当第二次保存文件时,存储的图像会损坏。只有新的图像会被创建。谢谢回复。 - Marquinio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接