2008-11-26 3 views
21

Je peux obtenir des cellules pour formater en tant que dates, mais j'ai été incapable d'obtenir des cellules pour mettre en forme comme monnaie ... N'importe qui a un exemple de comment créer un style pour obtenir ça fonctionne? Mon code ci-dessous montre les styles que je crée ... le styleDateFormat fonctionne comme un champ alors que styleCurrencyFormat n'a aucun effet sur la cellule.Format de devise Excel de base avec POI Apache

private HSSFWorkbook wb; 
private HSSFCellStyle styleDateFormat = null; 
private HSSFCellStyle styleCurrencyFormat = null; 

......

public CouponicsReportBean(){ 
    wb = new HSSFWorkbook(); 
    InitializeFonts(); 

} 

public void InitializeFonts() 
{ 
    styleDateFormat = wb.createCellStyle(); 
    styleDateFormat.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy")); 


    styleCurrencyFormat = wb.createCellStyle(); 
    styleCurrencyFormat.setDataFormat(HSSFDataFormat.getBuiltinFormat("$#,##0.00")); 

} 
+0

Ce sera cool si vous pouvez accepter votre propre réponse parfois. ;) –

Répondre

35

Après avoir creusé dans la documentation un peu plus, j'ai trouvé la réponse:

http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFDataFormat.html

juste besoin de trouver un pré approprié -set format et fournir le code.

styleCurrencyFormat.setDataFormat((short)8); //8 = "($#,##0.00_);[Red]($#,##0.00)" 

Voici d'autres exemples: http://www.roseindia.net/java/poi/setDataFormat.shtml

+0

Merci de poster ce message! –

+3

La liste des formats intégrés est ici: https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/BuiltinFormats.html – bradvido

+0

La sortie est belle. Pardonnez-moi, mais si je clique sur 'Format Cells' dans Excel, je vois juste qu'il tombe dans la catégorie 'Custom'. Maintenant, comment puis-je faire pour tomber dans la catégorie «Devise»? – user3454439

5

Juste une mise à jour ci-dessus réponse. le '8' court ne fonctionne pas pour moi mais le '7' le fait.

cell.setCellValue(416.17);  
cellStyle.setDataFormat((short)7); 
cell.setCellStyle(cellStyle); 

O/P est 416,00 $

+1

Vous avez raison. 7 = $ xxx.xx 6 = $ xxx –

12

Pour au moins Excel 2010: Allez dans Excel. Formatez une cellule comme vous le voulez.

enter image description here

Revenez ensuite dans le dialogue de format. Sélectionnez personnalisé.

enter image description here

Copier coller le texte qu'il a sur la rangée supérieure sous Type: en

createHelper.createDataFormat().getFormat("<here>"); 

Exemple:

createHelper.createDataFormat().getFormat("_($* #,##0.00_);_($* (#,##0.00);_($* \"-\"??_);_(@_)"); //is the "Accounting" format. 

Assurez-vous de définir votre Populate vos cellules en utilisant un double. L'utilisation de l'index peut entraîner des problèmes avec différentes versions d'Excel. Notez que le nouveau format que vous créez ci-dessus se retrouve dans le dialogue personnalisé à partir de la deuxième étape.

+0

Excellent! Ceci est un épargnant de vie. Je suis en mesure d'obtenir la monnaie correcte.Cela signifie que si je format la cellule en utilisant cette méthode, lorsque j'ouvre le document dans Excel, cliquez sur la cellule, faites un clic droit pour obtenir 'Format des cellules', je peux obtenir la 'Devise' sous la catégorie de format! Merci merci merci – user3454439

2

Vous pouvez essayer ce code pour formater votre portable avec le mode de change (.. Avec séparateur thowsand comme utilisé au Brésil ou en Allemagne Par exemple 12.345,67):

HSSFCellStyle cell = yourWorkBook.createCellStyle(); 
CreationHelper ch = yourWorkBook.getCreationHelper(); 
cell.setDataFormat(ch.createDataFormat().getFormat("#,##0.00;\\-#,##0.00")); 
Questions connexes