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()
Спасибо.
Ответы
Ответ 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.