Author: nick
Date: Thu Nov 30 08:15:55 2006
New Revision: 480987

URL: http://svn.apache.org/viewvc?view=rev&rev=480987
Log:
Support Excel files which contain a WORKBOOK entry, rather than the usual 
Workbook one. Fixes bug 40840

Added:
    
jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/data/WORKBOOK_in_capitals.xls
   (with props)
    
jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestUppercaseWorkbook.java
Modified:
    jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java

Modified: 
jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
URL: 
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java?view=diff&rev=480987&r1=480986&r2=480987
==============================================================================
--- jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java 
(original)
+++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java 
Thu Nov 30 08:15:55 2006
@@ -38,6 +38,7 @@
 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 @@
 
         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();
 

Added: 
jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/data/WORKBOOK_in_capitals.xls
URL: 
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/data/WORKBOOK_in_capitals.xls?view=auto&rev=480987
==============================================================================
Binary file - no diff available.

Propchange: 
jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/data/WORKBOOK_in_capitals.xls
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: 
jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestUppercaseWorkbook.java
URL: 
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestUppercaseWorkbook.java?view=auto&rev=480987
==============================================================================
--- 
jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestUppercaseWorkbook.java
 (added)
+++ 
jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestUppercaseWorkbook.java
 Thu Nov 30 08:15:55 2006
@@ -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);
+       }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
Mailing List:    http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/

Reply via email to