List of usage examples for org.apache.poi.xssf.eventusermodel XSSFReader getSheet
public InputStream getSheet(String relId) throws IOException, InvalidFormatException
From source file:org.pentaho.di.trans.steps.excelinput.staxpoi.StaxPoiSheet.java
License:Apache License
public StaxPoiSheet(XSSFReader reader, String sheetName, String sheetID) throws InvalidFormatException, IOException, XMLStreamException { this.sheetName = sheetName; xssfReader = reader;/*w w w .j a va2 s .c o m*/ sheetId = sheetID; sst = reader.getSharedStringsTable(); styles = reader.getStylesTable(); sheetStream = reader.getSheet(sheetID); XMLInputFactory factory = XMLInputFactory.newInstance(); sheetReader = factory.createXMLStreamReader(sheetStream); headerRow = new ArrayList<String>(); while (sheetReader.hasNext()) { int event = sheetReader.next(); if (event == XMLStreamConstants.START_ELEMENT && sheetReader.getLocalName().equals("dimension")) { String dim = sheetReader.getAttributeValue(null, "ref"); // empty sheets have dimension with no range if (StringUtils.contains(dim, ':')) { dim = dim.split(":")[1]; numRows = StaxUtil.extractRowNumber(dim); numCols = StaxUtil.extractColumnNumber(dim); } else { maxColsNumberDefined = false; numCols = StaxUtil.MAX_COLUMNS; numRows = StaxUtil.MAX_ROWS; } } if (event == XMLStreamConstants.START_ELEMENT && sheetReader.getLocalName().equals("row")) { currentRow = Integer.parseInt(sheetReader.getAttributeValue(null, "r")); firstRow = currentRow; // calculate the number of columns in the header row while (sheetReader.hasNext()) { event = sheetReader.next(); if (event == XMLStreamConstants.END_ELEMENT && sheetReader.getLocalName().equals("row")) { // if the row has ended, break the inner while loop break; } if (event == XMLStreamConstants.START_ELEMENT && sheetReader.getLocalName().equals("c")) { String attributeValue = sheetReader.getAttributeValue(null, "t"); if (attributeValue != null) { if (attributeValue.equals("s")) { // if the type of the cell is string, we continue while (sheetReader.hasNext()) { event = sheetReader.next(); if (event == XMLStreamConstants.START_ELEMENT && sheetReader.getLocalName().equals("v")) { int idx = Integer.parseInt(sheetReader.getElementText()); String content = new XSSFRichTextString(sst.getEntryAt(idx)).toString(); headerRow.add(content); break; } } } else if (attributeValue.equals("inlineStr")) { // if the type of the cell is string, we continue while (sheetReader.hasNext()) { event = sheetReader.next(); if (event == XMLStreamConstants.START_ELEMENT && sheetReader.getLocalName().equals("is")) { while (sheetReader.hasNext()) { event = sheetReader.next(); if (event == XMLStreamConstants.CHARACTERS) { String content = new XSSFRichTextString(sheetReader.getText()) .toString(); headerRow.add(content); break; } } break; } } } } else { break; } } } // we have parsed the header row break; } } }
From source file:org.pentaho.di.trans.steps.excelinput.staxpoi.StaxPoiSheetTest.java
License:Apache License
private XSSFReader mockXSSFReader(final String sheetId, final String sheetContent, final SharedStringsTable sst, final StylesTable styles) throws Exception { XSSFReader reader = mock(XSSFReader.class); when(reader.getSharedStringsTable()).thenReturn(sst); when(reader.getStylesTable()).thenReturn(styles); when(reader.getSheet(sheetId)).thenAnswer(new Answer<InputStream>() { public InputStream answer(InvocationOnMock invocation) throws Throwable { return IOUtils.toInputStream(sheetContent, "UTF-8"); }/*from ww w .j a va2 s . c o m*/ }); return reader; }