]> source.dussan.org Git - poi.git/commitdiff
[bug-69411] add XSSFReader.getSheetIterator
authorPJ Fanning <fanningpj@apache.org>
Sat, 26 Oct 2024 15:22:52 +0000 (15:22 +0000)
committerPJ Fanning <fanningpj@apache.org>
Sat, 26 Oct 2024 15:22:52 +0000 (15:22 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1921571 13f79535-47bb-0310-9956-ffa450edef68

poi-examples/src/main/java/org/apache/poi/examples/xssf/eventusermodel/LoadPasswordProtectedXlsxStreaming.java
poi-ooxml/src/main/java/org/apache/poi/xssf/eventusermodel/XSSFBReader.java
poi-ooxml/src/main/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java
poi-ooxml/src/test/java/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java

index 25c900965a597e86508adf663c90a4e795e3ad44..55cd2c552f19ec81670204ff80e1c0b31800e322 100644 (file)
 package org.apache.poi.examples.xssf.eventusermodel;
 
 import java.io.InputStream;
+import java.util.Iterator;
 
 import org.apache.poi.examples.xssf.usermodel.LoadPasswordProtectedXlsx;
 import org.apache.poi.openxml4j.opc.OPCPackage;
 import org.apache.poi.poifs.crypt.temp.AesZipFileZipEntrySource;
 import org.apache.poi.xssf.eventusermodel.XSSFReader;
-import org.apache.poi.xssf.eventusermodel.XSSFReader.SheetIterator;
 
 /**
  * An example that loads a password protected workbook and counts the sheets.
@@ -48,11 +48,12 @@ public final class LoadPasswordProtectedXlsxStreaming {
         try (AesZipFileZipEntrySource source = AesZipFileZipEntrySource.createZipEntrySource(inputStream);
              OPCPackage pkg = OPCPackage.open(source)) {
             XSSFReader reader = new XSSFReader(pkg);
-            SheetIterator iter = (SheetIterator)reader.getSheetsData();
+            Iterator<InputStream> iter = reader.getSheetsData();
             int count = 0;
             while(iter.hasNext()) {
-                iter.next();
-                count++;
+                try (InputStream stream = iter.next()) {
+                    count++;
+                }
             }
             System.out.println("sheet count: " + count);
         }
index bf730e79d1862344f066140b547777ba8541bc8f..85f04f7bd88518d27914298743a3958b63b23c60 100644 (file)
@@ -107,9 +107,10 @@ public class XSSFBReader extends XSSFReader {
      * @return iterator of {@link InputStream}s
      * @throws InvalidFormatException if the sheet data format is invalid
      * @throws IOException if there is an I/O issue reading the data
+     * @since POI 5.3.1
      */
     @Override
-    public Iterator<InputStream> getSheetsData() throws IOException, InvalidFormatException {
+    public SheetIterator getSheetIterator() throws IOException, InvalidFormatException {
         return new SheetIterator(workbookPart);
     }
 
index 8bd52bb9e863a2b8ec0c5f3813f3e4ed553b472c..bb656b281d5aa538afdf02a78cf6db1d6888fa73 100644 (file)
@@ -265,8 +265,24 @@ public class XSSFReader {
      *
      * @throws InvalidFormatException if the sheet data format is invalid
      * @throws IOException if there is an I/O issue reading the data
+     * @see #getSheetIterator()
      */
     public Iterator<InputStream> getSheetsData() throws IOException, InvalidFormatException {
+        return getSheetIterator();
+    }
+
+    /**
+     * Returns an Iterator which will let you get at all the
+     * different Sheets in turn.
+     * Each sheet's InputStream is only opened when fetched
+     * from the Iterator. It's up to you to close the
+     * InputStreams when done with each one.
+     *
+     * @throws InvalidFormatException if the sheet data format is invalid
+     * @throws IOException if there is an I/O issue reading the data
+     * @since POI 5.3.1
+     */
+    public SheetIterator getSheetIterator() throws IOException, InvalidFormatException {
         return new SheetIterator(workbookPart);
     }
 
index cec4181569cbfa45e8e3a00e4aa667c92fca6a1b..872c6cd374a5b81945fbd663215d3f64e025476c 100644 (file)
@@ -156,7 +156,7 @@ public final class TestXSSFReader {
             XSSFReader r = new XSSFReader(pkg);
 
             String[] sheetNames = {"Sheet4", "Sheet2", "Sheet3", "Sheet1"};
-            XSSFReader.SheetIterator it = (XSSFReader.SheetIterator) r.getSheetsData();
+            XSSFReader.SheetIterator it = r.getSheetIterator();
 
             int count = 0;
             while (it.hasNext()) {