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

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

Introduction

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

Prototype

public InputStream getWorkbookData() throws IOException, InvalidFormatException 

Source Link

Document

Returns an InputStream to read the contents of the main Workbook, which contains key overall data for the file, including sheet definitions.

Usage

From source file:com.ostrichemulators.semtool.poi.main.LowMemXlsReader.java

/**
 * Gets sheet name-to-id mapping//from w  w  w . jav a2  s . c  om
 *
 * @param r
 * @return
 */
private LinkedHashMap<String, String> readSheetInfo(XSSFReader r) {
    LinkedHashMap<String, String> map = new LinkedHashMap<>();

    try (InputStream is = r.getWorkbookData()) {
        SAXReader sax = new SAXReader();
        Document doc = sax.read(is);

        Namespace ns = new Namespace("r",
                "http://schemas.openxmlformats.org/officeDocument/2006/relationships");

        Element sheets = doc.getRootElement().element("sheets");
        for (Object sheet : sheets.elements("sheet")) {
            Element e = Element.class.cast(sheet);
            String name = e.attributeValue("name");
            String id = e.attributeValue(new QName("id", ns));
            map.put(name, id);
        }
    } catch (Exception e) {
        log.error(e, e);
    }

    return map;
}

From source file:ec.util.spreadsheet.poi.FastPoiBook.java

License:EUPL

private static ByteSource newWorkBookDataSupplier(final XSSFReader reader) {
    return new ByteSource() {
        @Override//  w  ww  . j  av  a  2 s . c  om
        public InputStream openStream() throws IOException {
            try {
                return reader.getWorkbookData();
            } catch (InvalidFormatException ex) {
                throw new IOException(ex);
            }
        }
    };
}

From source file:org.apache.metamodel.excel.XlsxSpreadsheetReaderDelegate.java

License:Apache License

private void buildTables(final XSSFReader xssfReader, final XlsxWorkbookToTablesHandler workbookToTables)
        throws Exception {
    final InputStream workbookData = xssfReader.getWorkbookData();
    final XMLReader workbookParser = ExcelUtils.createXmlReader();
    workbookParser.setContentHandler(workbookToTables);
    workbookParser.parse(new InputSource(workbookData));
    FileHelper.safeClose(workbookData);//from w  w w  .j  av  a  2  s.  c  o m
}

From source file:org.jberet.support.io.ExcelStreamingItemReader.java

License:Open Source License

@Override
protected void initWorkbookAndSheet(final int startRowNumber) throws Exception {
    InputStream workbookDataInputStream = null;
    XMLStreamReader workbookStreamReader = null;

    try {//from   ww w .java  2 s.  co m
        final OPCPackage opcPackage = OPCPackage.open(inputStream);
        final XSSFReader xssfReader = new XSSFReader(opcPackage);
        workbookDataInputStream = xssfReader.getWorkbookData();
        final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
        workbookStreamReader = xmlInputFactory.createXMLStreamReader(workbookDataInputStream);
        sharedStringsTable = xssfReader.getSharedStringsTable();

        /*
        sample sheet element:
        <sheets>
        <sheet name="Movies" sheetId="1" state="visible" r:id="rId2"/>
        <sheet name="Person" sheetId="2" state="visible" r:id="rId3"/>
        </sheets>
         */
        while (workbookStreamReader.hasNext()) {
            if (workbookStreamReader.next() == XMLStreamConstants.START_ELEMENT
                    && "sheet".equals(workbookStreamReader.getLocalName())) {
                final String shn = workbookStreamReader.getAttributeValue(null, "name");
                final String shId = workbookStreamReader.getAttributeValue(null, "sheetId");
                if ((sheetName != null && sheetName.equals(shn))
                        || (sheetName == null && String.valueOf(this.sheetIndex + 1).equals(shId))) {
                    //this is the target sheet
                    final String relationshipId = workbookStreamReader.getAttributeValue(schemaRelationships,
                            "id");
                    sheetInputStream = xssfReader.getSheet(relationshipId);
                    sheetStreamReader = xmlInputFactory.createXMLStreamReader(sheetInputStream);
                    break;
                }
            }
        }
    } finally {
        if (workbookDataInputStream != null) {
            try {
                workbookDataInputStream.close();

            } catch (final Exception e) {
                //ignore
            }
        }
        if (workbookStreamReader != null) {
            try {
                workbookStreamReader.close();
            } catch (final Exception e) {
                //ignore
            }
        }
    }

    /*
    sample row element:
    <row r="1" customFormat="false" ht="15" hidden="false" customHeight="false" outlineLevel="0" collapsed="false">
    <c r="A1" s="0" t="s">
        <v>0</v>
    </c>
    <c r="B1" s="0" t="s">
        <v>1</v>
    </c>
    <c r="C1" s="0" t="s">
        <v>2</v>
    </c>
    <c r="D1" s="0" t="s">
        <v>3</v>
    </c>
    </row>
            
    For inlineStr:
    <c r="A1" t="inlineStr">
    <is>
        <t>Date</t>
    </is>
    </c>
            
    Note: a blank cell does not show up in xml at all. So for list type beanType, need to detect blank cell and add
    null; for map or custom beanType, need to link to the correct header column by r attribute.
     */
    if (header == null) {
        headerMapping = new HashMap<String, String>();
        outerLoop: while (sheetStreamReader.hasNext()) {
            if (sheetStreamReader.next() == XMLStreamConstants.START_ELEMENT
                    && "row".equals(sheetStreamReader.getLocalName())) {
                final int rowNum = Integer.parseInt(sheetStreamReader.getAttributeValue(null, "r"));

                if (headerRow + 1 == rowNum) {
                    // got the header row, next loop through header row cells
                    final List<String> headerVals = new ArrayList<String>();
                    while (sheetStreamReader.hasNext()) {
                        final int event = sheetStreamReader.next();
                        if (event == XMLStreamConstants.START_ELEMENT
                                && "c".equals(sheetStreamReader.getLocalName())) {
                            final String label = getColumnLabel(sheetStreamReader.getAttributeValue(null, "r"));
                            final String value = getCellStringValue();
                            headerVals.add(value);
                            headerMapping.put(label, value);
                        } else if (event == XMLStreamConstants.END_ELEMENT
                                && "row".equals(sheetStreamReader.getLocalName())) {
                            header = headerVals.toArray(new String[headerVals.size()]);
                            currentRowNum = rowNum - 1;
                            break outerLoop;
                        }
                    }
                }
            }
        }
    }

    //fast forward to the start row, which may not immediately follow header row
    while (currentRowNum < startRowNumber - 1 && sheetStreamReader.hasNext()) {
        if (sheetStreamReader.next() == XMLStreamConstants.START_ELEMENT
                && "row".equals(sheetStreamReader.getLocalName())) {
            currentRowNum = Integer.parseInt(sheetStreamReader.getAttributeValue(null, "r")) - 1;
        } else if (sheetStreamReader.next() == XMLStreamConstants.END_ELEMENT
                && "row".equals(sheetStreamReader.getLocalName())) {
            if (currentRowNum >= startRowNumber - 1) {
                break;
            }
        }
    }
}

From source file:org.jreserve.gui.poi.read.xlsx.XlsxWorkbookReader.java

License:Open Source License

@Override
protected void readReader(XSSFReader reader) throws Exception {
    try {/*www  . jav a 2 s.  co  m*/
        wb = reader.getWorkbookData();
        InputSource is = new InputSource(wb);
        XMLReader parser = super.createParser();
        parser.parse(is);
    } finally {
        close();
    }
}

From source file:org.talend.dataprep.schema.xls.streaming.StreamingWorkbookReader.java

License:Open Source License

void loadSheets(XSSFReader reader, SharedStringsTable sst, StylesTable stylesTable, int rowCacheSize)
        throws IOException, InvalidFormatException, XMLStreamException {
    lookupSheetNames(reader.getWorkbookData());
    Iterator<InputStream> iter = reader.getSheetsData();
    int i = 0;/*from ww  w. j  a  v  a 2s .co m*/
    while (iter.hasNext()) {
        XMLEventReader parser = XMLInputFactory.newInstance().createXMLEventReader(iter.next());
        sheets.add(new StreamingSheet(sheetNames.get(i++),
                new StreamingSheetReader(sst, stylesTable, parser, rowCacheSize)));
    }
}

From source file:org.talend.dataprep.schema.xls.XlsUtilsTest.java

License:Open Source License

@Test
public void get_active_sheets() throws Exception {

    OPCPackage container = OPCPackage.open(getClass().getResourceAsStream("000_DTA_DailyTimeLog.xlsm"));
    XSSFReader xssfReader = new XSSFReader(container);

    List<String> names = XlsUtils.getActiveSheetsFromWorkbookSpec(xssfReader.getWorkbookData());

    Assertions.assertThat(names).isNotEmpty() //
            .containsExactly("MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY",
                    "WEEK SUMMARY");

}