Во-первых, я работаю над использованием Apache API событий POI с использованием HSSFListener и XSSFSheetXMLHandler.SheetContentsHandler для чтения больших файлов. Так что я не использую рабочую тетрадь, в которой могу использовать некоторые из удобных методов. Я уже реализовал это с этим подходом и получил ошибки OOM.
Для файлов XLS у меня возникли проблемы с выяснением того, как определить из NumberRecord, является ли формат форматом даты или числовым форматом. Я просмотрел эту старую ссылку ( Используя Apache POI HSSFListener, как определить тип даты ), но работает только ссылка Tika, поскольку другой больше не существует. Кажется, некоторые модификации будут работать с FormatTrackingHSSFListener, но мне что-то там не хватает.
Я видел, как некоторые люди упоминали об использовании DateUtil, чтобы проверить, находится ли значение в InternalDateFormat, как показано ниже, но это не сработало.
case NumberRecord.sid:
NumberRecord numrec = (NumberRecord) record;
if (DateUtil.isInternalDateFormat(numrec.getXFIndex())) {
System.out.println("Cell found with date value " + DateUtil.getJavaDate(numrec.getValue())
+ " at row " + numrec.getRow() + " and column " + numrec.getColumn());
} else {
System.out.println("Cell found with value " + numrec.getValue()
+ " at row " + numrec.getRow() + " and column " + numrec.getColumn());
}
Интересно, будет ли работать метод isADateFormat (https://poi.apache.org/apidocs/dev/org/apache/poi/ss/usermodel/DateUtil.html#isADateFormat -int- java .lang.String- ), но я не могу понять, что будет с formatString быть.
Мысли? Очень признателен. Документация в некотором роде есть, но разобраться с ней "весело".