web-dev-qa-db-fra.com

apache poi Excel grande largeur de colonne automatique

J'essaie de créer un grand Excel 2010 avec 30 colonnes et 1 million d'enregistrements avec Apache poi le plus récent. Je crée comme décrit dans ce lien http://svn.Apache.org/repos/asf/poi/trunk/src/examples/src/org/Apache/poi/xssf/usermodel/examples/BigGridDemo. Java . mais je veux que la largeur de colonne soit identique à la taille du texte de l'en-tête de colonne. mais quand je fais cela après avoir créé Excel avec le code suivant

for (int x = 0; x < sheet.getRow(0).getPhysicalNumberOfCells(); x++) {
            sheet.setColumnWidth(x, 20*256);
        }

cela prend un temps énorme et même avec une taille de tas de 5 Go, je sors de mémoire.

merci

rAM

13
Ram Sharan Mittal

Sélectionnez d'abord la première ligne ou l'en-tête, car seul l'en-tête peut vous donner le nombre maximal de cellules d'une ligne.

HSSFRow row = wb.getSheetAt(0).getRow(0);

Utilisez ensuite autoSizeColumn sur chaque colonne de cette ligne

for(int colNum = 0; colNum<row.getLastCellNum();colNum++)   
    wb.getSheetAt(0).autoSizeColumn(colNum);

Cela définira la largeur de colonne comme celle de sa largeur d'en-tête.

32
Sankumarsingh

Je suggère également que vous envisagiez d'utiliser sxssf. Il utilise un format xml pour le charger dans Excel. C'est beaucoup plus rapide et une meilleure façon de créer des rapports ou des grilles volumineux. La fonction de redimensionnement automatique dans xssf prend trop de temps par défaut.

4
Adi Kish

sheet.autoSizeColumn (columnNumber) fonctionne. cela redimensionnera la colonne à la plus grande longueur de cellule.

3
Nilesh