Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Julien Chable

He blogs, you blog, I blog ...

Archives

[Open XML] Utiliser POI pour générer des documents Office 2007 en Java et uniquement avec Java

De retour un peu dans le monde de Java, je n'avais jamais parlé de POI en détail, et pour cause, la version 3.5 apporte tout juste le support d'Open XML en son sein. Les Beta sont déjà disponibles et on attend la version finale de 3.5 début de l'année 2009. Lors du workshop DII à Bruxelles, j'avais eu l'occasion de voir Paolo Modatelli réaliser une présentation du projet. A mon tour pendant la session Interop Java/PHP, j'avais présenté quelques exemples d'utilisation de POI.

Evidemment avec POI, il n'est pas question d'utiliser une API COM ou Win32 pour manipuler Office ou autre DLL Windows. POI est bien une implémentation en pure Java. Envie de générer ou de consommer des documents Open XML (ou binaire) sur un serveur Unix/Linux : aucun problème !

Création d'un document Open XML avec POI

Aussi aisé qu'avec le SDK Open XML v2 ! Voici le code :

        XWPFDocument doc = new XWPFDocument();

        // First paragraph
        XWPFParagraph p1 = doc.createParagraph();
        p1.setAlignment(ParagraphAlignment.CENTER);

        XWPFRun r1 = p1.createRun();
        r1.setBold(true);
        r1.setText("Open XML en Java avec POI !");
        r1.setFontFamily("Courier");
        p1.setPageBreak(true); // Page break

        // Second paragraph
        XWPFParagraph p2 = doc.createParagraph();
        p2.setAlignment(ParagraphAlignment.CENTER);
        XWPFRun r2 = p2.createRun();
        r2.setFontSize(new BigInteger("30"));
        r2.setText("Open XML rocks !");
        r2.setItalic(true);

        FileOutputStream out = new FileOutputStream("Sample.docx");
        doc.write(out);
        out.close();

Voici le résultat :

image

Génération d'un classeur Excel

POI est originalement fait pour manipuler des fichiers Excel binaires, le voici donc capable de faire de même pour le format Open XML. Le code suivant crée un classeur et dans chaque colonne de la première ligne, un type de données différentes : texte riche, numérique, lien hypertext, champ calculé (avec Formula), etc :

        Workbook wb = new XSSFWorkbook(); // or new HSSFWorkbook();
        CreationHelper creationHelper = wb.getCreationHelper();
        Sheet sheet = wb.createSheet("new sheet");

        // Create a row and put some cells in it. Rows are 0 based.
        Row row = sheet.createRow((short) 0);
        // Create a cell and put a value in it.
        Cell cell = row.createCell((short) 0);
        cell.setCellValue(1);

        // numeric value
        row.createCell(1).setCellValue(1.2);

        // plain string value
        row.createCell(2).setCellValue("This is a string cell");

        // rich text string
        RichTextString str = creationHelper.createRichTextString("Apache");
        Font font = wb.createFont();
        font.setItalic(true);
        font.setUnderline(Font.U_SINGLE);
        str.applyFont(font);
        row.createCell(3).setCellValue(str);

        // boolean value
        row.createCell(4).setCellValue(true);

        // formula
        row.createCell(5).setCellFormula("SUM(A1:B1)");

        // date
        CellStyle style = wb.createCellStyle();
        style.setDataFormat(creationHelper.createDataFormat().getFormat(
                "m/d/yy h:mm"));
        cell = row.createCell(6);
        cell.setCellValue(new Date());
        cell.setCellStyle(style);

        // hyperlink
        row.createCell(7).setCellFormula("SUM(A1:B1)");
        cell.setCellFormula("HYPERLINK(\"
http://www.microsoft.com\",\"Microsoft\")");

        // Write the output to a file
        FileOutputStream fileOut = new FileOutputStream("DemoCell.xlsx");
        wb.write(fileOut);
        fileOut.close();

Le résultat

image

Voici un autre exemple afin de vous montrer que POI est aussi à l'aise dés qu'il faut mettre quelques formules dans une feuille :

image

Vous cherchez une valeur dans un feuille ? Voici le code qui n'est pas si loin de celui permis par le SDK Open XML v2 en .NET :

        Row row = getRowFromCellContent("TOTAL", sheet);
        Cell valueCell = null;
        for (Cell cell : row) {
            if (cell.getCellType() == Cell.CELL_TYPE_STRING
                    && cell.getStringCellValue().equals("TOTAL")) {
                valueCell = row.getCell(cell.getColumnIndex() + 1);
                break;
            }
        }
        return valueCell.getNumericCellValue();

Une facilité déconcertante pour créer des classeurs Excel, mais aussi pour les consommer. La démontration présentée pendant le workshop Open XML le montrait bien, la navigation dans les feuilles, les lignes et les cellules est déconcertante de simplicité. Ces démonstrations sont issues des exemples disponibles dans l'archive de POI.

Et PowerPoint ?

Pour le moment le format PowerPoint a été laissé de côté - support vraiment faible - mais sera prochainement disponible une fois que les autres formats seront stables.

Pour avoir utilisé auparavant POI pour lire des documents Excel binaire, ma constation est que ce projet open source se bonifie avec l'age. Un age d'ailleurs qui amène le respect aux personnes travaillant toujours sur ce projet puisqu'il est déjà dans sa 8ème année. Un age que la majorité des projets open source n'atteignent même pas pour se voir proposer une version stable ...

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: jeudi 11 décembre 2008 08:58 par neodante
Classé sous :

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01