Example usage for org.apache.poi.xssf.eventusermodel XSSFReader getSheet

List of usage examples for org.apache.poi.xssf.eventusermodel XSSFReader getSheet

Introduction

In this page you can find the example usage for org.apache.poi.xssf.eventusermodel XSSFReader getSheet.

Prototype

public InputStream getSheet(String relId) throws IOException, InvalidFormatException 

Source Link

Document

Returns an InputStream to read the contents of the specified Sheet.

Usage

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;
}