Using XSSFWorkbook, is it possible to append rows to an existing sheet? I am doing multiple writes (which was a PITA to solve due to a bug) and while I can write out new sheets multiple times, it does not appear that I can append.
What I am currently doing is the following:
- Read sheet to my workbook.
- Load workbook.
- Append rows to workbook in memory
- Write out again.
4 Does not appear to work, just ignores it completely!
I am aware that SXSSFWorkbook exists, but attempting to convert my existing XSSFWorkbook into a streaming workbook creates corruption upon write.
Is it possible to solve this concundrum?
Update: Changed code based on suggestion, but getting stream closed error.
Code: (The physical rows returns correctly, but nothing gets written out)
private void writeToSheetMultipleTimes(SXSSFWorkbook wb, ReportTemplateStructure appA, File wbFile) { Sheet sheet = wb.getSheetAt(0); log.info("Attempting multi-write to sheet: " + sheet.getSheetName()); for(int i = 0; i < 10; i++) { Row row = sheet.getRow(i); if (row == null) { row = sheet.createRow(i); } Cell cell = row.getCell(0, Row.CREATE_NULL_AS_BLANK); cell.setCellValue("Written value:" + i); int numRows = sheet.getPhysicalNumberOfRows(); log.info("Current row count: " + numRows); try{ XSSFWorkbook xssfBook = (XSSFWorkbook)writeOutAndReadBack(wb); wb.dispose(); wb = new SXSSFWorkbook(xssfBook); } catch (Exception e) { log.error("Unable to perform multiple write to same sheet", e); } } } public Workbook writeOutAndReadBack(Workbook wb) { if(!(wb instanceof SXSSFWorkbook)) { throw new IllegalArgumentException("Expected an instance of SXSSFWorkbook"); } Workbook result; try { FileOutputStream baos = new FileOutputStream(streamingWorkBookFile); wb.write(baos); InputStream is = new FileInputStream(streamingWorkBookFile); result = new XSSFWorkbook(is); } catch (IOException e) { throw new RuntimeException(e); } return result; }