У меня проблемы с чтением файла xlsx. По сути, если я читаю это не сверху вниз, я получаю пустую строку из пропущенных строк. Например, если я читаю строку 5, а затем любую строку от 1 до 4, я не получаю ответа, тогда как ячейки не пусты и их можно прочитать, если я это сделаю, прежде чем читать строку 5.
Я использую org.apache.poi.ss.usermodel. *
и com.monitorjbl.xlsx.StreamingReader
Кто-нибудь испытывает такие проблемы?
изменить 1:
Весь код довольно длинный, но метод, который я создал для чтения данной ячейки:
private static String getCellValue(Sheet sheet, int rowNum, int column) {
for (Row row : sheet) {
if (row.getRowNum() != rowNum) {
continue;
}
Cell cell = row.getCell(column);
return cell.getStringCellValue();
}
return "";
}
Я использую цикл foreach, потому что sheet.getRow (rowNum) тоже не работает. Чтобы читать разные ячейки, я вызываю этот метод несколько раз, поэтому тот факт, что я использую цикл foreach, не должен быть причиной проблемы.
Я также пытался использовать импорт XSSF, но затем я могу прочитать некоторые ячейки, но не все, что еще больше смущает меня.
изменить 2:
Звонок происходит здесь:
try (Workbook wb = StreamingReader.builder().bufferSize(BUFFER).open(tmp)) {
Sheet sheet = wb.getSheetAt(SHEET_NUMBER);
for (FieldEnum field : FieldEnum.getAllMandatory()) {
fieldMap.put(field, getCellValue(sheet, field.getRow(), field.getColumn()));
}
}
где tmp - файл xlsx, FieldEnum - перечисление, содержащее информацию о файле xlsx (имя ячейки, номер ячейки, ...) и fieldMap - Карта между FieldEnum и String со значением String для содержимого соответствующей ячейки.
редактировать 3:
Я только что понял, что когда я не получаю ответ, потому что возвращение в цикле foreach никогда не достигается. Я пока не знаю, происходит ли это из-за того, что сам цикл не запущен, или если это так, но всегда запускается продолжение. Инициализация rowNum и столбца происходит в FieldEnum, и именно здесь, если я переключаю порядок полей, я могу или не могу прочитать значение ячейки.
редактировать 4:
Поэтому я вхожу в цикл foreach, но по какой-то причине я никогда не получаю условие if