Apache POI评论Excel

时间:2010-05-07 01:58:56

标签: java apache excel apache-poi

我需要在Excel中为HSSF Cell添加注释。第一次一切正常但如果我打开同一个文件再次运行代码就会破坏文件。

我还注意到我只需要在Sheet上创建一个Drawing对象:

_sheet.createDrawingPatriarch();

如果上述行被多次执行,则注释将无效。

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

以下代码有效,但如果我再次打开文件,则不会添加注释,加上文件损坏!!!

有没有办法从Sheet获取现有的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 个答案:

答案 0 :(得分:2)

免责声明:我对此没有特别的经验。

但是,我注意到the Javadoc for createDrawingPatriarch()注意到它会破坏任何以前的图形(包括,我想评论,因为看起来评论存储为绘图族长的一部分)。您是否曾尝试首先检查文档是否具有绘图族长,如果没有,则仅创建它,例如,

HSSFPatriarch drawing = document.getDrawingPatriarch()
if (drawing == null)
    drawing = document.createDrawingPatriarch()

鉴于comments in the documentation for getDrawingPatriarch(),这似乎仍然有点脆弱,但我怀疑它可能适用于您的用例。