]> source.dussan.org Git - poi.git/commitdiff
Expose the version information from OldExcelExtractor
authorNick Burch <nick@apache.org>
Mon, 22 Dec 2014 05:59:51 +0000 (05:59 +0000)
committerNick Burch <nick@apache.org>
Mon, 22 Dec 2014 05:59:51 +0000 (05:59 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1647244 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java
src/testcases/org/apache/poi/hssf/extractor/TestOldExcelExtractor.java

index 3a08202a4ca3f149d904cde97b74d50af48552be..39a414327c2866044d37d64c0327d4e099767b61 100644 (file)
@@ -55,6 +55,7 @@ public class OldExcelExtractor {
     private RecordInputStream ris;
     private Closeable input;
     private int biffVersion;
+    private int fileType;
 
     public OldExcelExtractor(InputStream input) throws IOException {
         BufferedInputStream bstream = new BufferedInputStream(input, 8);
@@ -83,6 +84,7 @@ public class OldExcelExtractor {
     private void open(InputStream biffStream) {
         input = biffStream;
         ris = new RecordInputStream(biffStream);
+        prepare();
     }
     private void open(NPOIFSFileSystem fs) throws IOException {
         input = fs;
@@ -95,6 +97,7 @@ public class OldExcelExtractor {
         }
         
         ris = new RecordInputStream(directory.createDocumentInputStream(book));
+        prepare();
     }
 
     public static void main(String[] args) throws Exception {
@@ -106,16 +109,14 @@ public class OldExcelExtractor {
         OldExcelExtractor extractor = new OldExcelExtractor(new File(args[0]));
         System.out.println(extractor.getText());
     }
-
-    /**
-     * Retrieves the text contents of the file, as best we can
-     *  for these old file formats
-     */
-    public String getText() {
-        StringBuffer text = new StringBuffer();
+    
+    private void prepare() {
+        if (! ris.hasNextRecord())
+            throw new IllegalArgumentException("File contains no records!"); 
+        ris.nextRecord();
         
         // Work out what version we're dealing with
-        int bofSid = ris.getNextSid();
+        int bofSid = ris.getSid();
         switch (bofSid) {
             case BOFRecord.biff2_sid:
                 biffVersion = 2;
@@ -133,6 +134,33 @@ public class OldExcelExtractor {
                 throw new IllegalArgumentException("File does not begin with a BOF, found sid of " + bofSid); 
         }
         
+        // Get the type
+        BOFRecord bof = new BOFRecord(ris);
+        fileType = bof.getType();
+    }
+
+    /**
+     * The Biff version, largely corresponding to the Excel version
+     */
+    public int getBiffVersion() {
+        return biffVersion;
+    }
+    /**
+     * The kind of the file, one of {@link BOFRecord#TYPE_WORKSHEET},
+     *  {@link BOFRecord#TYPE_CHART}, {@link BOFRecord#TYPE_EXCEL_4_MACRO}
+     *  or {@link BOFRecord#TYPE_WORKSPACE_FILE}
+     */
+    public int getFileType() {
+        return fileType;
+    }
+
+    /**
+     * Retrieves the text contents of the file, as best we can
+     *  for these old file formats
+     */
+    public String getText() {
+        StringBuffer text = new StringBuffer();
+        
         // To track formats and encodings
         CodepageRecord codepage = null;
         // TODO track the XFs and Format Strings
index f966cb10cea46e5de66a66127186a505484ca200..fdc53d531185b9c3708029637ef6080d5c0e4218 100644 (file)
@@ -51,6 +51,10 @@ public final class TestOldExcelExtractor extends POITestCase {
         // Check we find a few numbers we expect in there
         assertContains(text, "11");
         assertContains(text, "784");
+        
+        // Check the type
+        assertEquals(4, extractor.getBiffVersion());
+        assertEquals(0x10, extractor.getFileType());
     }
     public void testSimpleExcel5() {
         for (String ver : new String[] {"5", "95"}) {
@@ -69,6 +73,10 @@ public final class TestOldExcelExtractor extends POITestCase {
             
             // Check we got the sheet names (new formats only)
             assertContains(text, "Sheet: Feuil3");
+            
+            // Check the type
+            assertEquals(5, extractor.getBiffVersion());
+            assertEquals(0x05, extractor.getFileType());
         }
     }