web-dev-qa-db-fra.com

Apache POI Excel - comment configurer les colonnes à développer?

J'utilise Apache POI API pour générer Excel spreadsheet afin de générer des données.

Le problème auquel je suis confronté concerne le moment où la feuille de calcul est créée et ouverte, les colonnes ne sont pas développées, de sorte qu'un texte aussi long que le texte formaté Date ne s'affiche pas à première vue.

Je pourrais simplement cliquer deux fois sur la bordure de colonne dans Excel pour l'agrandir ou la faire glisser pour ajuster la largeur de la colonne, mais il pourrait y avoir plus de 20 colonnes et je ne veux pas le faire manuellement à chaque fois que j'ouvre le tableur:

J'ai découvert (bien que cela puisse être une mauvaise méthode) groupRow() et setColumnGroupCollapsed() pourraient peut-être faire l'affaire mais pas de chance. Peut-être que je l'utilise mal.

Exemple d'extrait de code

        Workbook wb = new HSSFWorkbook();
        CreationHelper createHelper = wb.getCreationHelper();
        //create sheet
        Sheet sheet = wb.createSheet("masatoSheet");

        //not really working yet.... :(
        //set group for expand/collapse
        //sheet.groupRow(0, 10); //just random fromRow toRow argument values...
        //sheet.setColumnGroupCollapsed(0, true);

        //create row
        Row row = sheet.createRow((short)0);
        //put a cell in the row and store long text data
        row.createCell(0).setCellValue("Loooooooong text not to show up first");

Lorsque cette feuille de calcul est créée, la chaîne "Le texte à ne pas afficher en premier" apparaît dans la cellule, mais comme la colonne n'est pas développée, seul "Loooooooo" s'affiche.

Comment puis-je le configurer pour que lorsque je ouvre ma feuille de calcul, la colonne soit déjà développée ???

83
masato-san

Après que vous avez ajouté toutes vos données à la feuille, vous pouvez appeler autoSizeColumn(int column) sur votre feuille pour ajuster automatiquement les colonnes à la taille appropriée.

Voici un lien vers le API .

Voir cet article pour plus de références Problème d'adaptation de la taille de la cellule Excel à la taille du contenu lors de l'utilisation d'Apache poi

151
Sean

Astuce: Pour que la taille automatique fonctionne, l'appel à sheet.autoSizeColumn(columnNumber) doit être effectué après le remplissage des données dans Excel.

Appeler la méthode avant de renseigner les données n'aura aucun effet.

40
Unni Kris

Si vous souhaitez redimensionner automatiquement toutes les colonnes d'un classeur, voici une méthode qui pourrait être utile: 

public void autoSizeColumns(Workbook workbook) {
    int numberOfSheets = workbook.getNumberOfSheets();
    for (int i = 0; i < numberOfSheets; i++) {
        Sheet sheet = workbook.getSheetAt(i);
        if (sheet.getPhysicalNumberOfRows() > 0) {
            Row row = sheet.getRow(sheet.getFirstRowNum());
            Iterator<Cell> cellIterator = row.cellIterator();
            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
                int columnIndex = cell.getColumnIndex();
                sheet.autoSizeColumn(columnIndex);
            }
        }
    }
}
28
Ondrej Kvasnovsky

Vous pouvez essayer quelque chose comme ça:

HSSFSheet summarySheet = wb.createSheet();
summarySheet.setColumnWidth(short column, short width);

Voici les paramètres: numéro de colonne dans la feuille et sa largeur Mais, les unités de largeur sont assez petites, vous pouvez essayer 4000 par exemple.

8
UVM

Pour les points d'intérêt Excel: 

sheetName.autoSizeColumn(cellnum); 
8
Adnan Ghaffar

exemple de code ci-dessous

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("your sheet name");
HSSFRow row = sheet.createRow(0);

cell = row.createCell(0);
cell.setCellValue("A BIG NAME WITH AUTO SIZE FEATURE ENABLED");

// c'est crucial

sheet.autoSizeColumn(0);

// l'argument doit être un numéro de cellule

cell = row.createCell(1);
cell.setCellValue("a big name without auto size feature enabled");

Vérifiez la sortie et allez noisette :)

4
Mateen

Si vous connaissez le nombre de vos colonnes (par exemple, il est égal à une liste de collection). Vous pouvez simplement utiliser ce support pour ajuster toutes les colonnes d'une feuille (si vous utilisez au moins Java 8):

IntStream.range(0, columnCount).forEach((columnIndex) -> sheet.autoSizeColumn(columnIndex));
1
snap

C’est très simple, utilisez ce code d’une ligne DataSheet.autoSizeColumn (0)

ou donnez le nombre de colonnes entre crochets dataSheet.autoSizeColumn (numéro de cellule)

Vous pouvez aussi envelopper le texte. Exemple de code PFB:

CellStyle wrapCellStyle = new_workbook.createCellStyle();
                    wrapCellStyle.setWrapText(true);
0
Akash