Comment AUTOFIT contenu dans la cellule en utilisant api JXL?JXL formatage des cellules
Répondre
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.
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.
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.
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);
où highest
est un int qui contient la plus grande longueur de données dans la colonne.
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.
La méthode setAutosize() NE FONCTIONNERA PAS si votre cellule contient plus de 255 caractères.Ceci est lié à la spécification de largeur de colonne maxi Excel 2003: http://office.microsoft.com/en-us/excel-help/excel-specifications-and-limits-HP005199291.aspx
Vous devrez écrire votre propre méthode de calcul automatique pour gérer ce cas.
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);
}
}
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);
}
}
- 1. Jxl et nombre maximal de cellules formatées
- 2. Verrouillage de cellules dans un document Excel généré par JXL
- 3. JAVA - Erreur de mémoire insuffisante lors de l'écriture de cellules Excel en jxl
- 4. contenu indésirable de cellules à base de formule à l'aide JXL api en JAVA
- 5. Erreur lors du formatage des cellules avec des nombres par OleDbDataAdapter et Excel
- 6. Le doute dans l'API jxl?
- 7. Formatage DataGridView
- 8. Formage Excel à l'aide de JXL
- 9. Formatage des chaînes
- 10. Formatage des données DataBinder.Eval
- 11. Formatage des données ResourceWriter
- 12. Rafraîchissement du contenu des cellules après la suppression des cellules
- 13. uitableview chargement des cellules avec le contenu des cellules précédentes
- 14. Formatage conditionnel Numéros iwork
- 15. Sélection des cellules spécifiques
- 16. UITableView - ajouter des cellules
- 17. Travailler avec des cellules
- 18. Formatage des nombres dans Scala?
- 19. L'ordre des cellules dans DataGridView.SelectedCells?
- 20. Étirement des cellules du tableau
- 21. personnalisé question des cellules uitableview
- 22. Fusionner des cellules dans datagridview
- 23. MYSQL: supprimer des cellules vides
- 24. Insérer des caractères dans des cellules existantes
- 25. Remplissage des cellules en fonction des valeurs
- 26. Comment créer un nouveau fichier Excel à l'aide de JXL?
- 27. Comment lire un fichier Excel en utilisant JXL 2.6.12 jar
- 28. Prévention de la réorganisation des cellules pour des cellules particulières dans l'iPhone SDK
- 29. regex pour le formatage des mots
- 30. chaîne MySQL formatage + des instructions conditionnelles
Grande ... que cela fonctionne ... –
Merci beaucoup! Pourriez-vous ajouter le type de la cellule? C'est CellView? – sboda