我需要在 Excel 中向 HSSF 单元格添加注释。第一次一切正常,但如果我打开同一个文件并再次运行代码,它会损坏文件。
我还注意到我只需要在 Sheet 上创建一个 Drawing 对象一次:
_sheet.createDrawingPatriarch();
如果上面的行被多次执行,注释将不起作用。
那么有没有人试过向单元格添加评论,关闭文件,再次打开文件并尝试向不同的单元格添加更多评论?
下面的代码有效,但如果我再次打开文件,则不会添加注释,而且文件会损坏!!!
有没有办法从工作表中获取现有的绘图对象?
任何想法表示赞赏。谢谢!!
_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);
最佳答案
免责声明:我对此没有特别的经验。
但是,我确实注意到 the Javadoc for createDrawingPatriarch()注意到它会破坏任何以前的图形(包括,我猜评论,因为看起来评论是作为绘图族长的一部分存储的)。您是否尝试过先检查文档是否有绘图族长,只有在没有时才创建它,例如,
HSSFPatriarch drawing = document.getDrawingPatriarch()
if (drawing == null)
drawing = document.createDrawingPatriarch()
考虑到 comments in the documentation for getDrawingPatriarch(),这似乎仍然有些脆弱。 ,但我怀疑它可能适用于您的用例。
关于java - Apache POI 注释 Excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2785719/