Od jakiegoś czasu używam Apache POI do programowego odczytywania istniejących plików Excel 2003. Teraz mam nowe wymaganie, aby tworzyć całe pliki .xls w pamięci (nadal używam Apache POI), a następnie zapisywać je do pliku na końcu. Jedynym problemem stojącym na mojej drodze jest obsługa komórek z datami.
Rozważ następujący kod:
Date myDate = new Date();
HSSFCell myCell;
// code that assigns a cell from an HSSFSheet to 'myCell' would go here...
myCell.setCellValue(myDate);
Kiedy piszę skoroszyt zawierający tę komórkę do pliku i otwieram go w programie Excel, komórka jest wyświetlana jako liczba. Tak, zdaję sobie sprawę, że Excel przechowuje swoje „daty” jako liczbę dni od 1 stycznia 1900 r. I to właśnie reprezentuje liczba w komórce.
PYTANIE: Jakich wywołań API mogę użyć w POI, aby powiedzieć, że chcę zastosować domyślny format daty w mojej komórce daty?
Idealnie byłoby, gdyby komórka arkusza kalkulacyjnego była wyświetlana z tym samym domyślnym formatem daty, jaki przypisałby jej program Excel, gdyby użytkownik ręcznie otworzył arkusz kalkulacyjny w programie Excel i wpisał wartość komórki, którą program Excel rozpoznał jako datę.
źródło
BuiltinFormats
która zawiera listę wszystkich standardowych formatów (nie tylko formatów dat) znanych w programie Excel. Trzymam się jednego z nich, aby użyć go jako mojego parametru dogetFormat()
metody pokazanej w powyższym fragmencie.getCreationHelper()
jest potrzebny? Pracuję teraz z Mule, aby wygenerować plik wyjściowy Excel i faktycznie mogłem użyć programucreateDataFormat()
bez pomocnika tworzenia i wygenerowałem plik Excel w moim teście. Czy jest wada, aby go nie używać? Dzięki!mm/dd/yyyy
. Kiedy używam innego formatu, program Excel wyświetla błądFile error, some number formats may have been lost
, wyświetlaDate
typ w programie Excel. Nie mam pojęcia, jak można to naprawić.Aby ustawić domyślny typ Excela Data (domyślnie ustawienie regionalne poziomu systemu operacyjnego / -> tj. Xlsx będzie wyglądać inaczej, gdy zostanie otwarty przez osobę z Niemiec lub Wielkiej Brytanii / i oznaczony gwiazdką, jeśli wybierzesz go w selektorze formatu komórek programu Excel), należy:
Zrobiłem to z xlsx i działało dobrze.
źródło
Ten przykład dotyczy pracy z typami plików .xlsx. Ten przykład pochodzi ze strony .jsp używanej do tworzenia arkusza kalkulacyjnego .xslx.
źródło
Piszę tutaj swoją odpowiedź, ponieważ może być pomocna dla innych czytelników, którzy mogą mieć nieco inne wymagania niż pytający tutaj.
Przygotowuję szablon .xlsx; wszystkie komórki, które zostaną wypełnione datami, są już sformatowane jako komórki daty (w programie Excel).
Otwieram szablon .xlsx za pomocą Apache POI, a następnie po prostu wpisuję datę do komórki i działa.
W poniższym przykładzie komórka A1 jest już sformatowana w programie Excel za pomocą tego formatu
[$-409]mmm yyyy
, a kod Java jest używany tylko do wypełnienia komórki.Po otwarciu programu Excel data jest poprawnie sformatowana.
źródło
Ten przykładowy kod może służyć do zmiany formatu daty. Tutaj chcę zmienić z rrrr-MM-dd na dd-MM-rrrr. Oto
pos
pozycja kolumny.źródło
Aby poznać ciąg formatu używany przez program Excel bez zgadywania: utwórz plik Excela, napisz datę w komórce A1 i sformatuj ją tak, jak chcesz. Następnie uruchom następujące wiersze:
Następnie skopiuj i wklej wynikowy ciąg, usuń ukośniki odwrotne (na przykład
d/m/yy\ h\.mm;@
staje sięd/m/yy h.mm;@
) i użyj go w kodzie http://poi.apache.org/spreadsheet/quick-guide.html#CreateDateCells :źródło