]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.excel.poi/src/org/simantics/excel/poi/parser/streaming/StreamingParser.java
Excel parsing interface
[simantics/interop.git] / org.simantics.excel.poi / src / org / simantics / excel / poi / parser / streaming / StreamingParser.java
diff --git a/org.simantics.excel.poi/src/org/simantics/excel/poi/parser/streaming/StreamingParser.java b/org.simantics.excel.poi/src/org/simantics/excel/poi/parser/streaming/StreamingParser.java
new file mode 100644 (file)
index 0000000..add64d9
--- /dev/null
@@ -0,0 +1,62 @@
+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