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