11
votes

Apache POI pour Excel: régler le type de cellule sur "Texte" pour une colonne entière

J'ai besoin de générer un fichier .xls (Excel), à l'aide de la bibliothèque Java Apache POI pour les tableurs de calcul .

Le fichier contiendra une liste de numéros de téléphone dans la colonne A, formaté comme "0221 ..." ou "+49221 ..." - Donc Excel par défaut les interprète comme des cellules numériques. C'est mauvais, car le chanteur 0 ou + sera coupé.

Pour résoudre le problème, je peux utiliser cell.setcelltype (cell.cell_type_string) , qui fonctionne bien, mais uniquement pour les cellules spécifiques que je définis ceci pour.

Comment puis-je appliquer ce paramètre pour la colonne entière (c'est-à-dire même pour toutes les cellules restantes, où l'utilisateur entrera des numéros de téléphone supplémentaires)?

dans Excel, c'est possible : sélection de la colonne entière et appliquez le type de cellule (le paramètre survit à enregistrer / charger le fichier.)

Mais je ne trouve pas la méthode correcte pour POI.


0 commentaires

4 Réponses :


13
votes

sera Cette aide?

En créant un format de données avec le symbole @ et en utilisant cela dans une cellule cellulaire objet qui est ensuite transmis à la méthode SetDefaultColumnStyle (), il était Possible de définir le type de données par défaut de la colonne dans ce cas, dans ce cas, texte. Je n'ai pas expérimenté plus loin mais je soupçonne qu'il serait possible de faire quelque chose de similaire avec d'autres objets de style pour définir le type par défaut sur numérique ou même format personnalisé tel que la devise.


2 commentaires

Ça à l'air bon! Dès que je reviens au projet, je vais essayer cette solution. Merci!


J'ai fait la même chose. var cllstyle = this.workbook.Createcellstyle (); var workbook = nouveau HSSFWorkbook (); var currdataformat = workbook.createdataformat (); cllstyl.dataformat = currdataformat.getformat ("@"); feuille.setDefaultColumnstyle (1, clstyle); Mais cela ne montre pas le format "texte", mais il affiche "date". S'il vous plaît aidez-moi à ce sujet.



21
votes

Voici quelques exemples de code inspiré par la réponse de VLAD:

DataFormat fmt = workbook.createDataFormat();
CellStyle textStyle = workbook.createCellStyle();
textStyle.setDataFormat(fmt.getFormat("@"));
worksheet.setDefaultColumnStyle(0, textStyle);


0 commentaires

0
votes

VLAD: Cela a eu la majeure partie du problème fait. J'ai trouvé que toutes les lignes vides ont été formatées comme je les voulais. Cependant, des rangées où j'avais des zéros initiales ont regardé et ont travaillé bien; Toutefois, si je devais modifier une valeur préexistante avec une autre valeur commençant par zéro, les zéros ont disparu. Je vous recommande donc d'ajouter du code à la recherche de la valeur dans la cellule pour réinitialiser le SetCellstyle sur le texte. Voici quelques extraits: Méthode CreeCeller Public CreeCellul (Row R !, Cellule Bbjnumber, Valeur BBJString!) XXX PRE>

MODYRET C! P>

#text_format! = #wb!.createCellStyle()
#text_format!.setDataFormat(#format!.getFormat("@"))


0 commentaires

3
votes

Un meilleur moyen de la définir maintenant à l'aide de POI consiste à utiliser la classe intégré> classe.

EG:

Pour convertir le type de colonne à numérique xxx

la liste complète de intégré des formats peut être vu, ici


0 commentaires