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/