J'utilise le code suivant afin de redimensionner automatiquement les colonnes de ma feuille de calcul:
for (int i = 0; i < columns.size(); i++) {
sheet.autoSizeColumn(i, true);
sheet.setColumnWidth(i, sheet.getColumnWidth(i) + 600);
}
Le problème est qu'il faut plus de 10 minutes pour redimensionner automatiquement chaque colonne en cas de grandes feuilles de calcul avec plus de 3000 lignes. Cela va très vite pour les petits documents. Y a-t-il quelque chose qui pourrait aider le dimensionnement automatique à fonctionner plus rapidement?
Solution qui a fonctionné pour moi:
Il était possible d'éviter les régions fusionnées, je pouvais donc parcourir les autres cellules et enfin redimensionner automatiquement la cellule la plus grande comme ceci:
int width = ((int)(maxNumCharacters * 1.14388)) * 256;
sheet.setColumnWidth(i, width);
où 1,14388 est une largeur maximale de caractères de la police "Serif" et 256 unités de police.
Les performances du dimensionnement automatique sont passées de 10 minutes à 6 secondes.
La fonction autoSizeColumn elle-même ne fonctionne pas parfaitement et certaines largeurs de colonnes ne correspondent pas exactement aux données à l'intérieur. J'ai donc trouvé une solution qui fonctionne pour moi.
sheet.autoSizeColumn(<columnIndex>);
// get autosized column width
int currentColumnWidth = sheet.getColumnWidth(<columnIndex>);
// add custom value to the current width and apply it to column
sheet.setColumnWidth(<columnIndex>, (currentColumnWidth + 2500));
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);
int currentColumnWidth = sheet.getColumnWidth(columnIndex);
sheet.setColumnWidth(columnIndex, (currentColumnWidth + 2500));
}
}
}
}
P.S. Merci Ondrej Kvasnovsky pour la fonction https://stackoverflow.com/a/35324693/13087091