J'utilise Apache POI depuis un certain temps pour lire des fichiers Excel 2003 existants par programmation. Maintenant, j'ai une nouvelle exigence pour créer des fichiers .xls entiers en mémoire (toujours en utilisant Apache POI), puis les écrire dans un fichier à la fin. Le seul problème qui me gêne est la manipulation des cellules avec des dates.
Considérez le code suivant:
Date myDate = new Date();
HSSFCell myCell;
// code that assigns a cell from an HSSFSheet to 'myCell' would go here...
myCell.setCellValue(myDate);
Lorsque j'écris le classeur contenant cette cellule dans un fichier et que je l'ouvre avec Excel, la cellule s'affiche sous forme de nombre. Oui, je me rends compte qu'Excel stocke ses «dates» sous forme de nombre de jours depuis le 1er janvier 1900 et c'est ce que représente le nombre dans la cellule.
QUESTION: Quels appels d'API puis-je utiliser dans POI pour lui indiquer que je souhaite qu'un format de date par défaut soit appliqué à ma cellule de date?
Idéalement, je souhaite que la cellule de la feuille de calcul soit affichée avec le même format de date par défaut qu'Excel l'aurait attribué si un utilisateur avait ouvert manuellement la feuille de calcul dans Excel et tapé une valeur de cellule qu'Excel reconnaissait comme étant une date.
la source
BuiltinFormats
qui répertorie tous les formats standard (pas seulement les formats de date) connus d'Excel. Je m'en tiens à l'un de ceux à utiliser comme paramètre de lagetFormat()
méthode indiquée dans l'extrait de code ci-dessus.getCreationHelper()
est nécessaire? Je travaille actuellement avec Mule pour générer un fichier de sortie Excel et j'ai pu utiliser lecreateDataFormat()
sans l'aide de création et généré un fichier Excel dans mon test. Y a-t-il un inconvénient à ne pas l'utiliser? Merci!mm/dd/yyyy
. Lorsque j'utilise un autre format, Excel affiche une erreurFile error, some number formats may have been lost
, il affiche leDate
type dans Excel. Je n'ai aucune idée de comment cela peut être résolu.Pour définir le type Excel par défaut Date (défini par défaut sur les paramètres régionaux du système d'exploitation / -> c'est-à-dire que xlsx aura un aspect différent lorsqu'il est ouvert par une personne allemande ou britannique / et signalé par un astérisque si vous le choisissez dans le sélecteur de format de cellule d'Excel), vous devez:
Je l'ai fait avec xlsx et cela a bien fonctionné.
la source
Cet exemple concerne l'utilisation des types de fichiers .xlsx. Cet exemple provient d'une page .jsp utilisée pour créer une feuille de calcul .xslx.
la source
J'écris ma réponse ici parce qu'elle peut être utile à d'autres lecteurs, qui pourraient avoir une exigence légèrement différente de celle du questionneur ici.
Je prépare un modèle .xlsx; toutes les cellules qui seront remplies avec des dates, sont déjà formatées comme cellules de date (en utilisant Excel).
J'ouvre le modèle .xlsx en utilisant Apache POI, puis j'écris simplement la date dans la cellule, et cela fonctionne.
Dans l'exemple ci-dessous, la cellule A1 est déjà formatée à partir d'Excel avec le format
[$-409]mmm yyyy
et le code Java est utilisé uniquement pour remplir la cellule.À l'ouverture d'Excel, la date est formatée correctement.
la source
Cet exemple de code peut être utilisé pour modifier le format de date. Ici, je veux passer de aaaa-MM-jj à jj-MM-aaaa. Voici la
pos
position de la colonne.la source
Pour connaître la chaîne de format utilisée par Excel sans avoir à la deviner: créez un fichier Excel, écrivez une date dans la cellule A1 et formatez-la comme vous le souhaitez. Exécutez ensuite les lignes suivantes:
Ensuite, copiez-collez la chaîne résultante, supprimez les contre-obliques (par exemple
d/m/yy\ h\.mm;@
devientd/m/yy h.mm;@
) et utilisez-la dans le code http://poi.apache.org/spreadsheet/quick-guide.html#CreateDateCells :la source