| |
| /* ==================================================================== |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| ==================================================================== */ |
| |
| package org.apache.poi.examples.hssf.usermodel; |
| |
| import java.io.FileInputStream; |
| import java.io.IOException; |
| import java.io.InputStream; |
| |
| import org.apache.poi.hssf.eventusermodel.HSSFEventFactory; |
| import org.apache.poi.hssf.eventusermodel.HSSFListener; |
| import org.apache.poi.hssf.eventusermodel.HSSFRequest; |
| import org.apache.poi.hssf.record.BOFRecord; |
| import org.apache.poi.hssf.record.BoundSheetRecord; |
| import org.apache.poi.hssf.record.LabelSSTRecord; |
| import org.apache.poi.hssf.record.NumberRecord; |
| import org.apache.poi.hssf.record.RowRecord; |
| import org.apache.poi.hssf.record.SSTRecord; |
| import org.apache.poi.poifs.filesystem.POIFSFileSystem; |
| |
| /** |
| * This example shows how to use the event API for reading a file. |
| */ |
| @SuppressWarnings({"java:S106","java:S4823"}) |
| public class EventExample implements HSSFListener { |
| private SSTRecord sstrec; |
| |
| /** |
| * This method listens for incoming records and handles them as required. |
| * @param record The record that was found while reading. |
| */ |
| @Override |
| public void processRecord(org.apache.poi.hssf.record.Record record) |
| { |
| switch (record.getSid()) |
| { |
| // the BOFRecord can represent either the beginning of a sheet or the workbook |
| case BOFRecord.sid: |
| BOFRecord bof = (BOFRecord) record; |
| if (bof.getType() == BOFRecord.TYPE_WORKBOOK) |
| { |
| System.out.println("Encountered workbook"); |
| // assigned to the class level member |
| } else if (bof.getType() == BOFRecord.TYPE_WORKSHEET) |
| { |
| System.out.println("Encountered sheet reference"); |
| } |
| break; |
| case BoundSheetRecord.sid: |
| BoundSheetRecord bsr = (BoundSheetRecord) record; |
| System.out.println("New sheet named: " + bsr.getSheetname()); |
| break; |
| case RowRecord.sid: |
| RowRecord rowrec = (RowRecord) record; |
| System.out.println("Row found, first column at " |
| + rowrec.getFirstCol() + " last column at " + rowrec.getLastCol()); |
| break; |
| case NumberRecord.sid: |
| NumberRecord numrec = (NumberRecord) record; |
| System.out.println("Cell found with value " + numrec.getValue() |
| + " at row " + numrec.getRow() + " and column " + numrec.getColumn()); |
| break; |
| // SSTRecords store a array of unique strings used in Excel. |
| case SSTRecord.sid: |
| sstrec = (SSTRecord) record; |
| for (int k = 0; k < sstrec.getNumUniqueStrings(); k++) |
| { |
| System.out.println("String table value " + k + " = " + sstrec.getString(k)); |
| } |
| break; |
| case LabelSSTRecord.sid: |
| LabelSSTRecord lrec = (LabelSSTRecord) record; |
| System.out.println("String cell found with value " |
| + sstrec.getString(lrec.getSSTIndex())); |
| break; |
| } |
| } |
| |
| /** |
| * Read an excel file and spit out what we find. |
| * |
| * @param args Expect one argument that is the file to read. |
| * @throws IOException When there is an error processing the file. |
| */ |
| public static void main(String[] args) throws IOException |
| { |
| // create a new file input stream with the input file specified |
| // at the command line |
| try (FileInputStream fin = new FileInputStream(args[0])) { |
| // create a new org.apache.poi.poifs.filesystem.Filesystem |
| try (POIFSFileSystem poifs = new POIFSFileSystem(fin)) { |
| // get the Workbook (excel part) stream in a InputStream |
| try (InputStream din = poifs.createDocumentInputStream("Workbook")) { |
| // construct out HSSFRequest object |
| HSSFRequest req = new HSSFRequest(); |
| // lazy listen for ALL records with the listener shown above |
| req.addListenerForAllRecords(new EventExample()); |
| // create our event factory |
| HSSFEventFactory factory = new HSSFEventFactory(); |
| // process our events based on the document input stream |
| factory.processEvents(req, din); |
| } |
| } |
| } |
| System.out.println("done."); |
| } |
| } |