2010-05-07 154 views
3

我需要在Excel中向HSSF單元添加註釋。一切工作正常第一次,但如果我打開相同的文件並再次運行代碼,它會破壞文件。Apache POI註釋Excel

我也注意到,我需要建立在薄片上繪圖對象只有一次:

_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); 
+0

+1。此代碼示例填寫了所有空白以用於評論;該站點文檔中的示例不起作用。謝謝! – RMorrisey 2011-02-01 17:43:22

回答

2

免責聲明:我有這個沒有特別的經驗。

但是,我注意到,the Javadoc for createDrawingPatriarch()指出它會破壞任何以前的圖形(包括我猜的評論,因爲看起來評論被存儲爲繪圖族長的一部分)。您是否嘗試過先檢查,看看文件是否具有繪圖族長,只有創造它,如果它不是,例如,

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

它似乎仍然認爲這可能給出的comments in the documentation for getDrawingPatriarch()是有些脆弱,但我懷疑它可能適合你的用例。

+0

那麼它確實是警告說的。第二次保存文件時,存儲的圖像會損壞。只有新創建的圖像。感謝您的迴應。 – Marquinio 2010-05-07 03:52:41