2012-12-12 12 views
5

próbie konwersji liczb w stylu europejskiej waluty z Apache POIApache POI waluty danych format

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

mam na przykład numer 2400 i 2,4

Co chcę to 2400,00 i 2, 40. Ale POI daje mi 2400,0 i 2,40. Kiedy próbuję go zmienić na

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

uzyskać wynik 2400,00 i 2400. To też nie jest to, czego chcę.

Czy istnieje możliwość poprawienia obu wartości?

Thx i Pozdrowienia

+0

Myślę, że musisz ustawić ciąg formatu w stylu amerykańskim/brytyjskim, a następnie otworzyć plik w kopii programu Excel w europejskim języku i zostanie wyświetlony zgodnie z oczekiwaniami. Próbowałeś tego? – Gagravarr

+0

thx, który działa częściowo. Przecinek i punkt są ustawiane w stylu europejskim, gdy używane są "#, ###. # 0", które zmienia się podczas otwierania w programie Excel do 2.400,0. Ale dostaję tylko jedno zero po przecinku. Numer wejściowy to 2400. – Logarith

+1

Co się stanie, jeśli utworzysz nowy plik w Excelu, stylujesz go w taki sposób, jaki chcesz, a następnie ładujesz go do Apache POI i czytasz ciąg formatu, co tam widzisz? – Gagravarr

Odpowiedz

8

Wreszcie Gagravarr dał prawo wskazówek, aby rozwiązać tę kwestię.

Końcowy roztwór:

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

Roztwór pojawił się po utworzeniu Excel plik ręcznie. Następnie przeczytać go przez Apache POI i wyodrębnianie ciąg formatu z

cell.getCellStyle().getDataFormatString() 

wynik był # ## 0,00 \ _ €

Więc użyłem tego formatu w kodzie górnym fragmencie, który dał poprawny wynik.

Thx

+0

Witam, mam ten sam problem. Czytając tę ​​stronę, otrzymałem ciąg formatu, ustawiłem go na zmienną currencyCellStyle, ale nie wiem, jak go użyć do odczytania poprawnej wartości. cell.getNumericCellValue()? cell.getStringCellValue()? Czy możesz wyjaśnić, jak odczytujesz wartość komórki za pomocą ustawionego właśnie formatu danych? Dziękuję. – Andrea

+0

Chciałbym również dodać, że komórki, które muszę przeczytać, są liczbami i liczbami wyliczonymi, więc istnieją także formuły do ​​oceny. Mam HSSFFormulaEvaluator do ich oceny, ale wynik jest nadal niespójny z tym, co Excel pokazuje jako wynik (mówię o precyzji i zaokrągleniu). – Andrea

+0

cześć, przepraszam, myślę, że nie mogę ci pomóc, ponieważ nie czytam wartości komórek. Właśnie piszę z setCellValue. Dla przykładu cell.setCellStyle (currencyCellStyle) and cell.setCellValue (value) – Logarith

3

Aktualizacja powyższego podejścia: Po ręcznego tworzenia pliku excel z wymaganym formatowaniu waluty, ciąg formatu można uzyskać pod kategorią „Custom” (w oknie dialogowym Formatowanie komórek). W ten sposób nie musimy czytać programu Excel za pomocą poi, aby uzyskać ten ciąg znaków.