2010-05-07 9 views
3

Je dois ajouter un commentaire à une cellule HSSF dans Excel. Tout fonctionne bien la toute première fois mais si j'ouvre le même fichier et réexécute le code il corrompt le fichier.Apache POI Commentaire Excel

J'ai aussi remarqué que je dois créer un objet de dessin sur une feuille une seule fois:

_sheet.createDrawingPatriarch();

Si la ligne ci-dessus est exécutée plus d'une fois, les commentaires ne fonctionneront pas.

Alors, est-ce que quelqu'un a essayé d'ajouter des commentaires aux cellules, fermant le fichier, ouvrant à nouveau le fichier et essayant d'ajouter plus de commentaires aux différentes cellules?

Le code ci-dessous fonctionne mais si j'ouvre à nouveau le fichier, les commentaires ne sont pas ajoutés, et le fichier est corrompu !!!

Existe-t-il un moyen d'obtenir l'objet Dessin existant à partir d'une feuille?

Toutes les idées ont été appréciées. Merci!!

_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. Cet exemple de code a rempli tous les blancs pour travailler avec des commentaires; l'exemple dans la documentation du site ne fonctionne pas. Merci! – RMorrisey

Répondre

2

Avertissement: J'ai aucune expérience particulière à ce sujet.

Cependant, je note que le the Javadoc for createDrawingPatriarch() note qu'il va détruire tous les graphiques précédents (y compris, je suppose que les commentaires, car il semble que les commentaires sont stockés dans le patriarche de dessin). Avez-vous essayé d'abord vérifier pour voir si le document a un patriarche dessin et ne crée si elle ne le fait pas, par exemple,

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

Il semble encore que cela peut être un peu fragile compte tenu de la comments in the documentation for getDrawingPatriarch(), mais je soupçonne que ce peut fonctionner pour votre cas d'utilisation.

+0

Eh bien, il fait exactement ce que dit l'AVERTISSEMENT. L'image stockée est corrompue lors de la sauvegarde du fichier la deuxième fois. Seules les nouvelles images sont créées. Merci pour la réponse. – Marquinio

Questions connexes