X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.excel.poi%2Fsrc%2Forg%2Fsimantics%2Fexcel%2Fpoi%2Fparser%2Fstreaming%2FStreamingParser.java;fp=org.simantics.excel.poi%2Fsrc%2Forg%2Fsimantics%2Fexcel%2Fpoi%2Fparser%2Fstreaming%2FStreamingParser.java;h=add64d9aa0c36e385d2aa4983f947318e797d711;hb=7abd05645636ea510269d77005717f43c2c445ba;hp=0000000000000000000000000000000000000000;hpb=f11cbe76b3f4be142c9f84ef9a7b6bc9dcc8ff23;p=simantics%2Finterop.git 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 index 0000000..add64d9 --- /dev/null +++ b/org.simantics.excel.poi/src/org/simantics/excel/poi/parser/streaming/StreamingParser.java @@ -0,0 +1,62 @@ +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; + } + +}