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 ???
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
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.
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);
}
}
}
}
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.
Pour les points d'intérêt Excel:
sheetName.autoSizeColumn(cellnum);
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 :)
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));
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);