web-dev-qa-db-fra.com

Comment définir un format de cellule sur Texte

J'utilise Apache-POI 3.14. J'ai besoin de verrouiller une cellule au format "Texte". Les données de ma cellule peuvent contenir tous des chiffres, mais elles sont toujours considérées comme une chaîne. Quand j'écris la cellule, je le fais comme ceci:

cell.setCellValue("001");
cell.setCellType(Cell.CELL_TYPE_STRING);

Lorsque j'ouvre le classeur de sortie dans Excel, la cellule contient la valeur correcte ("001") et s'affiche avec un petit triangle vert dans le coin. Le survol du point d'exclamation affiche le texte de survol The number in this cell is formatted as text or preceded by an apostrophe. Quand je regarde la mise en forme de la cellule (Clic droit -> Format des cellules), la "Catégorie" est affichée comme "Général". Je m'attendais à ce que ce soit un "texte".

Le problème se pose lorsqu'un utilisateur modifie la valeur dans la cellule en entrant uniquement des chiffres. Comme la "catégorie" est "générale", la valeur est entrée et affichée sous forme de nombre, en supprimant les zéros de gauche et en justifiant à droite.

Comment puis-je obtenir le même résultat que le dialogue "Formatage des cellules" d'Excel?

9
Steve H.

Vous pouvez essayer de définir le format de cellule en texte via

DataFormat fmt = wb.createDataFormat();
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setDataFormat(
    fmt.getFormat("@"));
cell.setCellStyle(cellStyle);

Remarque: CellStyles doit être réutilisé pour toutes les cellules applicables. Ne créez pas de nouvelles cellules pour chaque cellule.

Vous pouvez également essayer d’utiliser la fonctionnalité "Ignorer les erreurs" au format .xlsx. Toutefois, la prise en charge de cette fonctionnalité n’est pas encore totalement terminée, voir numéro 46136 et numéro 58641 pour l’analyse en cours.

Voir aussi cette page MSDN pour quelques informations supplémentaires

8
centic

Pour HSSF, 

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

Il définit simplement le style de la colonne entière en tant que Texte et la catégorie en tant que Texte.

Toutefois, si vous utilisez le format XSSF, cela ne fonctionne pas (j'utilise Apache Poi 3.15 et cela ne fonctionne pas pour moi) . plus du code ci-dessus en utilisant:

cell.setCellStyle(textStyle);

En ce qui concerne l'erreur, vous pouvez utiliser

sheet.addIgnoredErrors(new CellRangeAddress(0,9999,0,9999),IgnoredErrorType.NUMBER_STORED_AS_TEXT );

Il ignore l'erreur NUMBER_STORED_AS_TEXT pour les lignes 0 à 9999 et les colonnes 0 à 9999 et vous ne le verrez pas.

4
Shubhashish Mishra

On dirait que OP demandait une solution Apache. Après quelques recherches, j'ai trouvé cette réponse:

HSSFCellStyle style = book.createCellStyle();
style.setDataFormat(BuiltInFormats.getBuiltInFormat("text"));
1
Ramana Viswanadha

Je n'ai aucun moyen de tester cela, mais avez-vous essayé d'utiliser un modèle - un fichier Excel vide avec toutes les cellules au format texte?

0
Sebastian B