From da9b705c5df569ac4d71be1aa8997d025cc3fdca Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Thu, 30 Nov 2006 16:15:55 +0000 Subject: [PATCH] Support Excel files which contain a WORKBOOK entry, rather than the usual Workbook one. Fixes bug 40840 git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@480987 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/hssf/usermodel/HSSFWorkbook.java | 24 ++++++++++- .../poi/hssf/data/WORKBOOK_in_capitals.xls | Bin 0 -> 64512 bytes .../hssf/usermodel/TestUppercaseWorkbook.java | 39 ++++++++++++++++++ 3 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 src/testcases/org/apache/poi/hssf/data/WORKBOOK_in_capitals.xls create mode 100644 src/testcases/org/apache/poi/hssf/usermodel/TestUppercaseWorkbook.java diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java b/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java index 13c4669e22..14d0821dd8 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java @@ -38,6 +38,7 @@ import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; import java.io.ByteArrayInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -175,8 +176,29 @@ public class HSSFWorkbook sheets = new ArrayList(INITIAL_CAPACITY); names = new ArrayList(INITIAL_CAPACITY); + + // Normally, the Workbook will be in a POIFS Stream + // called "Workbook". However, some wierd XLS generators + // put theirs in one called "WORKBOOK" + String workbookName = "Workbook"; + try { + fs.getRoot().getEntry(workbookName); + // Is the default name + } catch(FileNotFoundException fe) { + // Try the upper case form + try { + workbookName = "WORKBOOK"; + fs.getRoot().getEntry(workbookName); + } catch(FileNotFoundException wfe) { + // Doesn't contain it in either form + throw new IllegalArgumentException("The supplied POIFSFileSystem contained neither a 'Workbook' entry, nor a 'WORKBOOK' entry. Is it really an excel file?"); + } + } - InputStream stream = fs.createDocumentInputStream("Workbook"); + + // Grab the data from the workbook stream, however + // it happens to be spelt. + InputStream stream = fs.createDocumentInputStream(workbookName); EventRecordFactory factory = new EventRecordFactory(); diff --git a/src/testcases/org/apache/poi/hssf/data/WORKBOOK_in_capitals.xls b/src/testcases/org/apache/poi/hssf/data/WORKBOOK_in_capitals.xls new file mode 100644 index 0000000000000000000000000000000000000000..1c3ef61d978362570d9426286b8f250fac511b01 GIT binary patch literal 64512 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%0A(ejVGf7K? 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 B05kvq literal 0 HcmV?d00001 diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestUppercaseWorkbook.java b/src/testcases/org/apache/poi/hssf/usermodel/TestUppercaseWorkbook.java new file mode 100644 index 0000000000..2239a9fa51 --- /dev/null +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestUppercaseWorkbook.java @@ -0,0 +1,39 @@ +package org.apache.poi.hssf.usermodel; + +import java.io.FileInputStream; + +import org.apache.poi.poifs.filesystem.POIFSFileSystem; + +import junit.framework.TestCase; + +/** + * Tests for how HSSFWorkbook behaves with XLS files + * with a WORKBOOK directory entry (instead of the more + * usual, Workbook) + */ +public class TestUppercaseWorkbook extends TestCase { + private String dirPath; + private String xlsA = "WORKBOOK_in_capitals.xls"; + + protected void setUp() throws Exception { + super.setUp(); + + dirPath = System.getProperty("HSSF.testdata.path"); + } + + /** + * Test that we can open a file with WORKBOOK + */ + public void testOpen() throws Exception { + FileInputStream is = new FileInputStream(dirPath + "/" + xlsA); + + POIFSFileSystem fs = new POIFSFileSystem(is); + + // Ensure that we have a WORKBOOK entry + fs.getRoot().getEntry("WORKBOOK"); + assertTrue(true); + + // Try to open the workbook + HSSFWorkbook wb = new HSSFWorkbook(fs); + } +} -- 2.39.5