web-dev-qa-db-fra.com

Apache POI insérer une image

J'ai des problèmes pour insérer une image dans une feuille Excel. Il y a beaucoup de questions à ce sujet, mais je ne peux tout simplement pas comprendre ce que je fais mal. Mon code s'exécute, ne montre aucune erreur mais je ne vois pas d'image insérée :(

voici le code:

    InputStream is = new FileInputStream("nasuto_tlo.png");
    byte [] bytes = IOUtils.toByteArray(is); 
    int pictureIndex = wb.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);
    is.close();

    CreationHelper helper = wb.getCreationHelper();
    Drawing drawingPatriarch = sheet.createDrawingPatriarch();
    ClientAnchor anchor = helper.createClientAnchor();

    anchor.setCol1(2);
    anchor.setRow1(3);
    Picture pict = drawingPatriarch.createPicture(anchor, pictureIndex);
    pict.resize();

    try {
        FileOutputStream out = new FileOutputStream(root+"/Busotina/Busotina1.xls");
        wb.write(out);
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
15
SteBra

le problème est que votre ancre n'est pas correcte. Vous devez définir les 4 valeurs, car les valeurs par défaut sont 0 - mais votre première colonne ne peut pas être plus à droite que la seconde;) Vous obtiendrez une étendue négative. Vous devriez recevoir un avertissement lorsque vous ouvrez le fichier Excel qu'il est corrompu.

Alors essayez

anchor.setCol1(2);
anchor.setCol2(3);
anchor.setRow1(3);
anchor.setRow2(4);

Un exemple de travail à partir d'un code que j'ai écrit:

// read the image to the stream
final FileInputStream stream =
        new FileInputStream( imagePath );
final CreationHelper helper = workbook.getCreationHelper();
final Drawing drawing = sheet.createDrawingPatriarch();

final ClientAnchor anchor = helper.createClientAnchor();
anchor.setAnchorType( ClientAnchor.MOVE_AND_RESIZE );


final int pictureIndex =
        workbook.addPicture(IOUtils.toByteArray(stream), Workbook.PICTURE_TYPE_PNG);


anchor.setCol1( 0 );
anchor.setRow1( LOGO_ROW ); // same row is okay
anchor.setRow2( LOGO_ROW );
anchor.setCol2( 1 );
final Picture pict = drawing.createPicture( anchor, pictureIndex );
pict.resize();
21
Mirco