diff options
author | PJ Fanning <fanningpj@apache.org> | 2024-10-26 15:22:52 +0000 |
---|---|---|
committer | PJ Fanning <fanningpj@apache.org> | 2024-10-26 15:22:52 +0000 |
commit | c9c8653e6efa0ad86ad53c6dd511d552a5dc1296 (patch) | |
tree | a81e0f827d82292ad8030089c42a410616158f7d | |
parent | a528d43590b3f71aa94310de881a35af887fdd0f (diff) | |
download | poi-c9c8653e6efa0ad86ad53c6dd511d552a5dc1296.tar.gz poi-c9c8653e6efa0ad86ad53c6dd511d552a5dc1296.zip |
[bug-69411] add XSSFReader.getSheetIterator
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1921571 13f79535-47bb-0310-9956-ffa450edef68
4 files changed, 24 insertions, 6 deletions
diff --git a/poi-examples/src/main/java/org/apache/poi/examples/xssf/eventusermodel/LoadPasswordProtectedXlsxStreaming.java b/poi-examples/src/main/java/org/apache/poi/examples/xssf/eventusermodel/LoadPasswordProtectedXlsxStreaming.java index 25c900965a..55cd2c552f 100644 --- a/poi-examples/src/main/java/org/apache/poi/examples/xssf/eventusermodel/LoadPasswordProtectedXlsxStreaming.java +++ b/poi-examples/src/main/java/org/apache/poi/examples/xssf/eventusermodel/LoadPasswordProtectedXlsxStreaming.java @@ -20,12 +20,12 @@ 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); } diff --git a/poi-ooxml/src/main/java/org/apache/poi/xssf/eventusermodel/XSSFBReader.java b/poi-ooxml/src/main/java/org/apache/poi/xssf/eventusermodel/XSSFBReader.java index bf730e79d1..85f04f7bd8 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xssf/eventusermodel/XSSFBReader.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xssf/eventusermodel/XSSFBReader.java @@ -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); } diff --git a/poi-ooxml/src/main/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java b/poi-ooxml/src/main/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java index 8bd52bb9e8..bb656b281d 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java @@ -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); } diff --git a/poi-ooxml/src/test/java/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java b/poi-ooxml/src/test/java/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java index cec4181569..872c6cd374 100644 --- a/poi-ooxml/src/test/java/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java +++ b/poi-ooxml/src/test/java/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java @@ -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()) { |