/ / L'utilisation de SXSSF (APACHE POI) et l'ajout de commentaires ne génèrent pas de fichier Excel approprié - excel, apache-poi

L'utilisation de SXSSF (APACHE POI) et l'ajout d'un commentaire ne génèrent pas le fichier Excel approprié - excel, apache-poi

Je rencontre des problèmes pour générer un fichier xlsx valideen utilisant SXSSF poi api. Le code ci-dessous génère un fichier Excel approprié si j'utilise: Workbook wb = new XSSFWorkbook (); mais échoue si j'utilise: SXSSFWorkbook wb = nouveau SXSSFWorkbook (100);

Erreur: enregistrements supprimés: commentaires de la partie /xl/comments1.xml (commentaires)

S'il vous plaît, aidez-moi à comprendre ce qui ne va pas avec le code. Je cherche à générer un fichier Excel avec des commentaires de cellule à l'aide de l'API SXSSF.

Code actuel:

    public static void main(String[] args) throws Exception {
// Workbook wb = new XSSFWorkbook();
SXSSFWorkbook wb = new SXSSFWorkbook(100);
Sheet sh = wb.createSheet();
for(int rownum = 0; rownum < 1000; rownum++){
Row row = sh.createRow(rownum);
for(int cellnum = 0; cellnum < 10; cellnum++){
Cell cell = row.createCell(cellnum);
String address = new CellReference(cell).formatAsString();
cell.setCellValue(address);
setCellComment(cell,address);
}
}

FileOutputStream out = new FileOutputStream("comments.xlsx");
wb.write(out);
out.close();
}

protected static void setCellComment(Cell cell, String message) {
Drawing drawing = cell.getSheet().createDrawingPatriarch();
CreationHelper factory = cell.getSheet().getWorkbook()
.getCreationHelper();
// When the comment box is visible, have it show in a 1x3 space
ClientAnchor anchor = factory.createClientAnchor();
anchor.setCol1(cell.getColumnIndex());
anchor.setCol2(cell.getColumnIndex() + 1);
anchor.setRow1(cell.getRowIndex());
anchor.setRow2(cell.getRowIndex() + 1);
anchor.setDx1(100);
anchor.setDx2(100);
anchor.setDy1(100);
anchor.setDy2(100);

// Create the comment and set the text+author
Comment comment = drawing.createCellComment(anchor);
RichTextString str = factory.createRichTextString(message);
comment.setString(str);
comment.setAuthor("Apache POI");
// Assign the comment to the cell
cell.setCellComment(comment);
}

Réponses:

5 pour la réponse № 1

J'ai eu le même problème et je l'ai résolu en définissant les propriétés de ligne et de colonne sur le Comment.

Modifier le setCellComment() méthode dans votre exemple comme suit devrait résoudre le problème.

protected static void setCellComment(Cell cell, String message) {

...

// Create the comment and set the text+author
Comment comment = drawing.createCellComment(anchor);
RichTextString str = factory.createRichTextString(message);
comment.setString(str);
comment.setAuthor("Apache POI");

// Set the row and column here
comment.setRow(cell.getRowIndex());
comment.setColumn(cell.getColumnIndex());

// Assign the comment to the cell
cell.setCellComment(comment);
}

J'ai découvert cette solution en regardant la source du setCellComment() méthode dans le XSSFCell classer. La méthode correspondante dans SXSSFCell ne définit pas la ligne ou la colonne.