Ich habe das folgende Problem mit Apache POI v3.12: Ich brauche eine XLSX-Datei mit 49 Zeilen [0..48] als Vorlage, füllen Sie es Zellen mit Daten und schreibe es als eine andere Datei aus, damit ich die Vorlage wiederverwenden kann. Was ich tue, ist etwa so:Apache POI getRow() gibt null zurück und .createRow schlägt fehl
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);
/später/
Row row = sheet.getRow(rownum);
if (null == row) {
row = sheet.createRow(rownum);
}
Beim Debuggen es stellt sich heraus, dass getRow() gibt null, aber der Versuch, .createRow() scheitert mit:
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)
...
fehle ich hier etwas? Soweit ich in den Apache-Dokumenten und -Foren gelesen habe, muss ich createRow() erstellen, wenn getRow() null zurückgibt. Das Blatt enthält keine Zeilen gemäß .getPhysicalRows(), .getFirstRowNum() und .getLastRowNum()
Vielen Dank.
Warum verwenden Sie SXSSFWorkbook für diesen Fall? Warum nicht einfach nur XSSFWorkbook für eine Datei dieser Größe verwenden? – Gagravarr
Ja Gagravarr, ich habe festgestellt, dass Streaming-Interfaces nicht in der Lage sind, das zu tun, was ich wollte. Ich habe meinen Code bereits geändert und alles funktioniert wie erwartet. Vielen Dank. –