Подтвердить что ты не робот

Apache POI getRow() возвращает null и .createRow не работает

У меня есть следующая проблема с Apache POI v3.12: Мне нужно использовать файл XLSX с 49 строками [0..48] в качестве шаблона, заполнить его ячейками данными и записать его как другой файл, чтобы я мог снова использовать шаблон. То, что я делаю, примерно такое:

XSSFWorkbook wbk_template = new XSSFWorkbook(new FileInputStream    (f_wbk_template));
SXSSFWorkbook wbk = new SXSSFWorkbook(wbk_template, 50, true);

Sheet sheet = wbk.getSheet(STR_SHEET_NAME);

/позже/

Row row = sheet.getRow(rownum);
if (null == row) {
    row = sheet.createRow(rownum);
}

После отладки выясняется, что getRow() возвращает значение null, но попытка выполнить .createRow() не выполнена:

java.lang.IllegalArgumentException: Attempting to write a row[2] in the range [0,48] that is already written to disk.
    at org.apache.poi.xssf.streaming.SXSSFSheet.createRow(SXSSFSheet.java:122)
...

Мне что-то здесь не хватает? Насколько я читал в документах и ​​форумах Apache, мне нужно создатьRow(), если getRow() возвращает null. Лист не содержит строк в соответствии с .getPhysicalRows(),.getFirstRowNum() и .getLastRowNum()

Спасибо.

4b9b3361

Ответ 1

См. документацию конструктора SXSSFWorkbook, которая принимает параметр XSSFWorkbook как параметр. Вы не можете переопределить или получить доступ к исходным строкам в файле шаблона. Вы пытаетесь перезаписать существующую строку, и API не поддерживает это. Ваше сообщение об исключении отражает это.

https://poi.apache.org/apidocs/org/apache/poi/xssf/streaming/SXSSFWorkbook.html#SXSSFWorkbook(org.apache.poi.xssf.usermodel.XSSFWorkbook)

В вашем случае использования вы можете попробовать http://jxls.sourceforge.net.