2009-11-03 9 views

Répondre

2

De l'JExcelApi FAQ

Comment puis-je faire la equivilent de "Format/colonne/sélection automatique Fit" d'Excel?

Il n'existe aucune fonction API pour le faire pour vous. Vous aurez besoin d'écrire du code qui scanne les cellules dans chaque colonne, calcule la longueur maximale, puis appelle setColumnView() en conséquence. Cela vous rapproche de ce qu'Excel fait mais pas exactement. Comme la plupart des polices ont des caractères de largeur variable, pour obtenir la même valeur exacte, vous devez utiliser FontMetrics pour calculer la largeur maximale de chaque chaîne dans la colonne. Personne n'a posté de code sur la façon de le faire pour le moment. N'hésitez pas à poster du code sur Yahoo! groupe ou envoyez-le directement à l'auteur de la FAQ répertorié au bas de cette page.

FontMetrics fait vraisemblablement référence à java.awt.FontMetrics. Vous devriez être capable de travailler quelque chose avec la méthode getLineMetrics (String, Graphics) que j'aurais.

37

Je sais que c'est une vieille question à ce stade, mais je cherchais la solution à cela et pensé que je l'afficherais au cas où quelqu'un d'autre en a besoin.

CellView Auto-Size

Je ne sais pas pourquoi la FAQ ne mentionne pas, car il existe très clairement dans la documentation.

Mon code ressemblait les suivantes:

for(int x=0;x<c;x++) 
{ 
    cell=sheet.getColumnView(x); 
    cell.setAutosize(true); 
    sheet.setColumnView(x, cell); 
} 

c stocke le nombre de colonnes créées
cellule est juste un support de lieu temporaire pour le retour CellView objet
feuille est mon WriteableSheet objet

L'Api avertit qu'il s'agit d'une fonction intensive du processeur, donc ce n'est probablement pas idéal pour les gros fichiers. Mais pour un petit fichier comme le mien (< 100 lignes) il a fallu peu de temps notable.

Espérons que cela aide quelqu'un.

+0

Grande ... que cela fonctionne ... –

+0

Merci beaucoup! Pourriez-vous ajouter le type de la cellule? C'est CellView? – sboda

2

La méthode de taille automatique de CellView ne fonctionne pas pour moi tout le temps. Pour ce faire, définissez par programme la taille (largeur) de la colonne en fonction de la plus grande longueur de données de la colonne. Ensuite, effectuez quelques opérations mathématiques.

CellView cv = excelSheet.getColumnView(0); 
cv.setSize((highest + ((highest/2) + (highest/4))) * 256); 

highest est un int qui contient la plus grande longueur de données dans la colonne.

6
for(int x=0;x<c;x++) 
{ 
    cell=sheet.getColumnView(x); 
    cell.setAutosize(true); 
    sheet.setColumnView(x, cell); 
} 

C'est bien, au lieu de balayer toutes les colonnes. Passez la colonne en paramètre.

void display(column) 
{ 
    Cell = sheet.getColumnView(column); 
    cell.setAutosize(true); 
    sheet.setColumnView(column, cell); 
} 

Ainsi, lorsque vous afficherez votre texte, vous pouvez définir la longueur particulière. Peut être utile pour les énormes fichiers Excel.

11

La méthode est explicite et a commenté:

private void sheetAutoFitColumns(WritableSheet sheet) { 
    for (int i = 0; i < sheet.getColumns(); i++) { 
     Cell[] cells = sheet.getColumn(i); 
     int longestStrLen = -1; 

     if (cells.length == 0) 
      continue; 

     /* Find the widest cell in the column. */ 
     for (int j = 0; j < cells.length; j++) { 
      if (cells[j].getContents().length() > longestStrLen) { 
       String str = cells[j].getContents(); 
       if (str == null || str.isEmpty()) 
        continue; 
       longestStrLen = str.trim().length(); 
      } 
     } 

     /* If not found, skip the column. */ 
     if (longestStrLen == -1) 
      continue; 

     /* If wider than the max width, crop width */ 
     if (longestStrLen > 255) 
      longestStrLen = 255; 

     CellView cv = sheet.getColumnView(i); 
     cv.setSize(longestStrLen * 256 + 100); /* Every character is 256 units wide, so scale it. */ 
     sheet.setColumnView(i, cv); 
    } 
} 
0

Essayez cette exemple:

expandColumns(sheet, 3); 

    workbook.write(); 
    workbook.close(); 

private void expandColumn(WritableSheet sheet, int amountOfColumns){ 
    int c = amountOfColumns; 
    for(int x=0;x<c;x++) 
    { 
     CellView cell = sheet.getColumnView(x); 
     cell.setAutosize(true); 
     sheet.setColumnView(x, cell); 
    } 
} 
Questions connexes