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
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.
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.
sheet.autoSizeColumn (columnNumber) fonctionne. cela redimensionnera la colonne à la plus grande longueur de cellule.