2012-12-12 15 views
5

cerco di convertire i numeri in stile moneta europea con Apache POIApache POI valuta Data Format

HSSFDataFormat cf = workbook.createDataFormat(); 
currencyCellStyle = workbook.createCellStyle(); 
currencyCellStyle.setDataFormat(cf.getFormat("#.###,#0")); 

ho per esempio, il numero 2400 e 2,4

Quello che voglio è 2400,00 e 2, 40. Ma POI mi dà 2400,0 e 2,40. Quando provo a cambiare a

currencyCellStyle.setDataFormat(cf.getFormat("#.###,00")); 

ottengo il risultato 2400,00 e 2.400. Anche questo non è quello che voglio.

Esiste la possibilità di ottenere entrambi i valori corretti?

Thx e Saluti

+0

Penso che sia necessario impostare la stringa di formato in stile USA/Regno Unito, quindi aprire il file in una copia di Excel in una versione locale europea e verrà eseguito il rendering come previsto. Ci hai provato? – Gagravarr

+0

thx che funziona in parte. La virgola e il punto sono impostati in stile europeo quando si utilizza "#, ###. # 0" che viene modificato all'apertura in Excel a 2.400,0. Ma ottengo solo uno zero dopo la virgola. Il numero di input è 2400. – Logarith

+1

Cosa succede se si crea un nuovo file in Excel, lo si modella come si desidera, quindi lo si carica in POI Apache e si legge la stringa di formato, che cosa vedi lì? – Gagravarr

risposta

8

Infine Gagravarr dato i suggerimenti giusti per risolvere questo problema.

La soluzione finale è:

HSSFDataFormat cf = workbook.createDataFormat(); 
currencyCellStyle = workbook.createCellStyle(); 
currencyCellStyle.setDataFormat(cf.getFormat("#,##0.00\\ _€")); 

La soluzione è venuto dopo la creazione di file manualmente Excel. Poi leggerlo in da Apache Poi e estrarre la stringa di formato con

cell.getCellStyle().getDataFormatString() 

Il risultato è stato #, ## 0.00 \ _ €

Così ho usato questo formato nel frammento di codice superiore, che ha dato il risultato corretto.

Thx

+0

Ciao, ho il tuo stesso problema. Leggendo questa pagina ho ottenuto la mia stringa di formato, l'ho impostata sulla variabile currencyCellStyle ma non so come usarla per leggere il valore corretto. cell.getNumericCellValue()? cell.getStringCellValue()? Puoi spiegare come leggi il valore della cella usando il dataformat che hai appena impostato? Grazie. – Andrea

+0

Vorrei anche aggiungere che le celle che devo leggere sono sia numeri che calcolati, quindi ci sono anche le formule da valutare. Ho un HSSFFormulaEvaluator per valutarli, ma il risultato è ancora incoerente con ciò che Excel mostra come risultato (sto parlando di precisione e arrotondamento). – Andrea

+0

ciao, scusa penso di non poterti aiutare, perché non leggo i valori delle celle. Sto scrivendo solo con setCellValue. Ad esempio cell.setCellStyle (currencyCellStyle) e cell.setCellValue (valore) – Logarith

3

Un aggiornamento per l'approccio di cui sopra: Dopo aver creato manualmente file di Excel con la formattazione di valuta necessaria, la stringa di formato può essere ottenuto sotto la categoria "Custom" (nella finestra di dialogo Formato cella). In questo modo non abbiamo bisogno di leggere l'excel via poi per ottenere questa stringa.