[bug-69411] add XSSFReader.getSheetIterator

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1921571 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
PJ Fanning 2024-10-26 15:22:52 +00:00
parent a528d43590
commit c9c8653e6e
4 changed files with 24 additions and 6 deletions

View File

@ -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,12 +48,13 @@ 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();
try (InputStream stream = iter.next()) {
count++;
}
}
System.out.println("sheet count: " + count);
}
}

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

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

View 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()) {