package org.simantics.excel.poi.parser.streaming; import java.io.File; import java.io.InputStream; import java.util.Iterator; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.eventusermodel.XSSFReader; import org.apache.poi.xssf.model.SharedStringsTable; import org.xml.sax.ContentHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; public class StreamingParser { public void process(Row row) { } public void processAllSheets(File file) throws Exception { OPCPackage pkg = OPCPackage.open(file); XSSFReader r = new XSSFReader( pkg ); SharedStringsTable sst = r.getSharedStringsTable(); XSSWorkbookHandler workbookHandler = new XSSWorkbookHandler(); XMLReader parser = fetchParser(workbookHandler); InputStream wb = r.getWorkbookData(); InputSource wbSource = new InputSource(wb); parser.parse(wbSource); wb.close(); Iterator sheets = r.getSheetsData(); XSSSheetHandler sheetHandler = new XSSSheetHandler(sst) { @Override public void writeRow(Row row) { process(row); } }; parser = fetchParser(sheetHandler); int sheetIndex = 0; while(sheets.hasNext()) { sheetHandler.setSheet(workbookHandler.getSheets().get(sheetIndex)); InputStream sheet = sheets.next(); InputSource sheetSource = new InputSource(sheet); parser.parse(sheetSource); sheet.close(); sheetIndex++; } } public XMLReader fetchParser(ContentHandler handler) throws SAXException { XMLReader parser = XMLReaderFactory.createXMLReader(); parser.setContentHandler(handler); return parser; } }