Я пишу программу, которая импортирует файлы xlsx с помощью EventModel Apache POI (SAX/XSSF). Я почти готов, но я не могу получить правильные даты.Как проверить, использует ли дата 1904 окно с Apache POI XSSF eventmodel
Я разборе ячейку с датой валютирования
<c r="D1" s="1">
<v>41319.558333333334</v>
</c>
Я использую org.apache.poi.ss.usermodel.DateUtil
класс, чтобы получить дату:
DateUtil.getJavaCalendar(doble date, bool use1904windowing);
То, что я должен пройти как use1904windowing
, чтобы получить правильные даты? Временно я использую false
, так как это дает мне правильные даты с моей тестовой рабочей книгой, но я знаю, что я должен прочитать эту ценность откуда-то.
В двоичном формате xls есть запись DateWindow1904Record
, которую я читаю с использованием HSSF. Каков его аналог в XSSF? Или я должен всегда использовать false
?
EDIT: Ответ @rgettman указал мне на решение, но оно не является полным. В модели событий у вас нет объекта xssfWorkbook, и вы не можете просто получить его.
Вместо этого вы можете создать CTWorkbook непосредственно из InputStream:
OPCPackage pkg = OPCPackage.open(filename);
XSSFReader r = new XSSFReader(pkg);
InputStream workbookXml = r.getWorkbookData();
CTWorkbook ctWorkbook = CTWorkbook.Factory.parse(workbookXml);
boolean isDate1904 = ctWorkbook.getWorkbookPr().getDate1904();
добавлен пример в контексте модели событий. – SWilk
У EDIT отсутствует код. Посмотрите комментарий Андрея ниже. – user517708