/**
* Factory for creating the appropriate kind of Workbook
- * (be it HSSFWorkbook or XSSFWorkbook), from the given input
+ * (be it {@link HSSFWorkbook} or {@link XSSFWorkbook}),
+ * by auto-detecting from the supplied input.
*/
public class WorkbookFactory {
- /**
- * Creates an HSSFWorkbook from the given POIFSFileSystem
- */
- public static Workbook create(POIFSFileSystem fs) throws IOException {
- return new HSSFWorkbook(fs);
- }
- /**
- * Creates an HSSFWorkbook from the given NPOIFSFileSystem
- */
- public static Workbook create(NPOIFSFileSystem fs) throws IOException {
- return new HSSFWorkbook(fs.getRoot(), true);
- }
- /**
- * Creates an XSSFWorkbook from the given OOXML Package
- */
- public static Workbook create(OPCPackage pkg) throws IOException {
- return new XSSFWorkbook(pkg);
- }
- /**
- * Creates the appropriate HSSFWorkbook / XSSFWorkbook from
- * the given InputStream.
- * Your input stream MUST either support mark/reset, or
- * be wrapped as a {@link PushbackInputStream}!
- */
- public static Workbook create(InputStream inp) throws IOException, InvalidFormatException {
- // If clearly doesn't do mark/reset, wrap up
- if(! inp.markSupported()) {
- inp = new PushbackInputStream(inp, 8);
- }
-
- if(POIFSFileSystem.hasPOIFSHeader(inp)) {
- return new HSSFWorkbook(inp);
- }
- if(POIXMLDocument.hasOOXMLHeader(inp)) {
- return new XSSFWorkbook(OPCPackage.open(inp));
- }
- throw new IllegalArgumentException("Your InputStream was neither an OLE2 stream, nor an OOXML stream");
- }
- /**
- * Creates the appropriate HSSFWorkbook / XSSFWorkbook from
- * the given File, which must exist and be readable.
- */
- public static Workbook create(File file) throws IOException, InvalidFormatException {
- if(! file.exists()) {
- throw new FileNotFoundException(file.toString());
- }
-
- try {
- NPOIFSFileSystem fs = new NPOIFSFileSystem(file);
- return new HSSFWorkbook(fs.getRoot(), true);
- } catch(OfficeXmlFileException e) {
- OPCPackage pkg = OPCPackage.open(file);
- return new XSSFWorkbook(pkg);
- }
- }
+ /**
+ * Creates a HSSFWorkbook from the given POIFSFileSystem
+ */
+ public static Workbook create(POIFSFileSystem fs) throws IOException {
+ return new HSSFWorkbook(fs);
+ }
+
+ /**
+ * Creates a HSSFWorkbook from the given NPOIFSFileSystem
+ */
+ public static Workbook create(NPOIFSFileSystem fs) throws IOException {
+ return new HSSFWorkbook(fs.getRoot(), true);
+ }
+
+ /**
+ * Creates a XSSFWorkbook from the given OOXML Package
+ */
+ public static Workbook create(OPCPackage pkg) throws IOException {
+ return new XSSFWorkbook(pkg);
+ }
+
+ /**
+ * Creates the appropriate HSSFWorkbook / XSSFWorkbook from
+ * the given InputStream.
+ * <p>Your input stream MUST either support mark/reset, or
+ * be wrapped as a {@link PushbackInputStream}! Note that
+ * using an {@link InputStream} has a higher memory footprint
+ * than using a {@link File}.</p>
+ */
+ public static Workbook create(InputStream inp) throws IOException, InvalidFormatException {
+ // If clearly doesn't do mark/reset, wrap up
+ if (! inp.markSupported()) {
+ inp = new PushbackInputStream(inp, 8);
+ }
+
+ if (POIFSFileSystem.hasPOIFSHeader(inp)) {
+ return new HSSFWorkbook(inp);
+ }
+ if (POIXMLDocument.hasOOXMLHeader(inp)) {
+ return new XSSFWorkbook(OPCPackage.open(inp));
+ }
+ throw new IllegalArgumentException("Your InputStream was neither an OLE2 stream, nor an OOXML stream");
+ }
+
+ /**
+ * Creates the appropriate HSSFWorkbook / XSSFWorkbook from
+ * the given File, which must exist and be readable.
+ */
+ public static Workbook create(File file) throws IOException, InvalidFormatException {
+ if (! file.exists()) {
+ throw new FileNotFoundException(file.toString());
+ }
+
+ try {
+ NPOIFSFileSystem fs = new NPOIFSFileSystem(file);
+ return new HSSFWorkbook(fs.getRoot(), true);
+ } catch(OfficeXmlFileException e) {
+ OPCPackage pkg = OPCPackage.open(file);
+ return new XSSFWorkbook(pkg);
+ }
+ }
}