Apache POI Excel-comment configurer les colonnes à étendre?
j'utilise Apache POI API
pour générer excel spreadsheet
pour produire certaines données.
le problème auquel je fais face est lorsque le tableur est créé et ouvert, les colonnes ne sont pas élargies de sorte qu'un long texte comme le texte date formaté n'apparaît pas à première vue.
je pourrais simplement double-cliquer la bordure de la colonne dans excel pour étendre ou faire glisser la bordure pour ajuster la largeur de la colonne mais il pourrait y avoir 20 + colonnes et il n'y a aucun moyen que je veux faire que manuellement chaque fois que j'ouvre la feuille de calcul: (
j'ai découvert (bien que pourrait être la mauvaise méthode) groupRow()
et setColumnGroupCollapsed()
pourrait être en mesure de faire le tour, mais pas de chance. Peut-être que je l'utilise dans le mauvais sens.
exemple de Code snippet
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 de caractères" Loooooooong text not to show up first " est dans la cellule mais puisque la colonne n'est pas étendue seulement "Loooooooo" s'affiche.
Comment puis-je le configurer pour que lorsque j'ouvre ma feuille de calcul, La colonne soit déjà étendue???
9 réponses
Après vous avez ajouté toutes vos données à la feuille, vous pouvez appeler autoSizeColumn(int column)
sur votre feuille d'ajuster les colonnes à la bonne taille
voici un lien vers API .
voir ce billet pour plus de référence problème d'ajustement de la taille de la cellule excel à la taille du contenu lors de l'utilisation d'apache poi
Conseil: pour faire fonctionner la taille automatique , l'appel à sheet.autoSizeColumn(columnNumber)
devrait être fait après peuplant les données dans l'excel.
appeler la méthode avant de remplir les données, n'aura aucun effet.
si vous voulez faire la taille automatique de toutes les colonnes dans 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(0);
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 ceci:
HSSFSheet summarySheet = wb.createSheet();
summarySheet.setColumnWidth(short column, short width);
ici les paramètres sont: numéro de colonne en feuille et sa largeur Mais, les unités de largeur sont assez petites, vous pouvez essayer 4000 par exemple.
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);
//argument doit être le nombre de cellules
cell = row.createCell(1);
cell.setCellValue("a big name without auto size feature enabled");
vérifier la sortie et aller noix :)
si vous connaissez le nombre de vos colonnes (F. E. c'est l'équivalent d'une liste de collecte). Vous pouvez simplement utiliser ce liner 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 cette ligne de code feuille de données.autoSizeColumn (0)
ou indiquer le nombre de colonnes entre parenthèses feuille de données.autoSizeColumn (numéro de cellule )
Vous pouvez utiliser setColumnWidth()
si vous voulez élargir votre cellule plus.