You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2008/09/21 20:43:49 UTC

svn commit: r697580 - in /poi/trunk/src: documentation/content/xdocs/ examples/src/org/apache/poi/hssf/eventusermodel/examples/ java/org/apache/poi/hssf/record/ testcases/org/apache/poi/hssf/record/

Author: nick
Date: Sun Sep 21 11:43:49 2008
New Revision: 697580

URL: http://svn.apache.org/viewvc?rev=697580&view=rev
Log:
Include the sheet name in the output of examples.XLS2CSVmra

Modified:
    poi/trunk/src/documentation/content/xdocs/changes.xml
    poi/trunk/src/documentation/content/xdocs/status.xml
    poi/trunk/src/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java
    poi/trunk/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java
    poi/trunk/src/testcases/org/apache/poi/hssf/record/TestBOFRecord.java

Modified: poi/trunk/src/documentation/content/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/changes.xml?rev=697580&r1=697579&r2=697580&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/changes.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/changes.xml Sun Sep 21 11:43:49 2008
@@ -37,6 +37,7 @@
 
 		<!-- Don't forget to update status.xml too! -->
         <release version="3.2-alpha1" date="2008-??-??">
+           <action dev="POI-DEVELOPERS" type="add">Include the sheet name in the output of examples.XLS2CSVmra</action>
            <action dev="POI-DEVELOPERS" type="fix">45784 - Support long chart titles in SeriesTextRecords</action>
            <action dev="POI-DEVELOPERS" type="fix">45777 - Throw an exception if HSSF Footer or Header is attemped to be set too long, rather than having it break during writing out</action>
            <action dev="POI-DEVELOPERS" type="add">45844 - Addtional diagnostics for HSLF SlideShowRecordDumper</action>

Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=697580&r1=697579&r2=697580&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Sun Sep 21 11:43:49 2008
@@ -34,6 +34,7 @@
 	<!-- Don't forget to update changes.xml too! -->
     <changes>
         <release version="3.2-alpha1" date="2008-??-??">
+           <action dev="POI-DEVELOPERS" type="add">Include the sheet name in the output of examples.XLS2CSVmra</action>
            <action dev="POI-DEVELOPERS" type="fix">45784 - Support long chart titles in SeriesTextRecords</action>
            <action dev="POI-DEVELOPERS" type="fix">45777 - Throw an exception if HSSF Footer or Header is attemped to be set too long, rather than having it break during writing out</action>
            <action dev="POI-DEVELOPERS" type="add">45844 - Addtional diagnostics for HSLF SlideShowRecordDumper</action>

Modified: poi/trunk/src/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java?rev=697580&r1=697579&r2=697580&view=diff
==============================================================================
--- poi/trunk/src/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java (original)
+++ poi/trunk/src/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java Sun Sep 21 11:43:49 2008
@@ -21,6 +21,7 @@
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.PrintStream;
+import java.util.ArrayList;
 
 import org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener;
 import org.apache.poi.hssf.eventusermodel.HSSFEventFactory;
@@ -34,6 +35,7 @@
 import org.apache.poi.hssf.record.BOFRecord;
 import org.apache.poi.hssf.record.BlankRecord;
 import org.apache.poi.hssf.record.BoolErrRecord;
+import org.apache.poi.hssf.record.BoundSheetRecord;
 import org.apache.poi.hssf.record.FormulaRecord;
 import org.apache.poi.hssf.record.LabelRecord;
 import org.apache.poi.hssf.record.LabelSSTRecord;
@@ -69,6 +71,11 @@
 	// Records we pick up as we process
 	private SSTRecord sstRecord;
 	private FormatTrackingHSSFListener formatListener;
+	
+	/** So we known which sheet we're on */
+	private int sheetIndex = -1;
+	private BoundSheetRecord[] orderedBSRs;
+	private ArrayList boundSheetRecords = new ArrayList();
 
 	// For handling formulas with string results
 	private int nextRow;
@@ -132,6 +139,9 @@
 
 		switch (record.getSid())
 		{
+		case BoundSheetRecord.sid:
+			boundSheetRecords.add(record);
+			break;
 		case BOFRecord.sid:
 			BOFRecord br = (BOFRecord)record;
 			if(br.getType() == BOFRecord.TYPE_WORKSHEET) {
@@ -139,6 +149,17 @@
 				if(workbookBuildingListener != null && stubWorkbook == null) {
 					stubWorkbook = workbookBuildingListener.getStubHSSFWorkbook();
 				}
+				
+				// Output the worksheet name
+				// Works by ordering the BSRs by the location of
+				//  their BOFRecords, and then knowing that we
+				//  process BOFRecords in byte offset order
+				sheetIndex++;
+				if(orderedBSRs == null) {
+					orderedBSRs = BoundSheetRecord.orderByBofPosition(boundSheetRecords);
+				}
+				output.println();
+				output.println(orderedBSRs[sheetIndex].getSheetname() + ":");
 			}
 			break;
 

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java?rev=697580&r1=697579&r2=697580&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java Sun Sep 21 11:43:49 2008
@@ -17,6 +17,10 @@
 
 package org.apache.poi.hssf.record;
 
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+
 import org.apache.poi.util.BitField;
 import org.apache.poi.util.BitFieldFactory;
 import org.apache.poi.util.LittleEndian;
@@ -329,4 +333,31 @@
     public void setVeryHidden(boolean veryHidden) {
 	    field_2_option_flags = veryHiddenFlag.setShortBoolean(field_2_option_flags, veryHidden);
     }
+    
+    /**
+     * Takes a list of BoundSheetRecords, and returns the all
+     *  ordered by the position of their BOFs.
+     */
+    public static BoundSheetRecord[] orderByBofPosition(List boundSheetRecords) {
+    	BoundSheetRecord[] bsrs = (BoundSheetRecord[])boundSheetRecords.toArray(
+    			new BoundSheetRecord[boundSheetRecords.size()]);
+    	
+    	// Sort
+    	Arrays.sort(bsrs, new BOFComparator());
+    	
+    	// All done
+    	return bsrs;
+    }
+    private static class BOFComparator implements Comparator {
+		public int compare(Object bsr1, Object bsr2) {
+			return compare((BoundSheetRecord)bsr1, (BoundSheetRecord)bsr2);
+		}
+		public int compare(BoundSheetRecord bsr1, BoundSheetRecord bsr2) {
+			if(bsr1.field_1_position_of_BOF < bsr2.field_1_position_of_BOF)
+				return -1;
+			if(bsr1.field_1_position_of_BOF == bsr2.field_1_position_of_BOF)
+				return 0;
+			return 1;
+		}
+    }
 }

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/record/TestBOFRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/record/TestBOFRecord.java?rev=697580&r1=697579&r2=697580&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/record/TestBOFRecord.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/record/TestBOFRecord.java Sun Sep 21 11:43:49 2008
@@ -18,6 +18,7 @@
 package org.apache.poi.hssf.record;
 
 import java.io.InputStream;
+import java.util.ArrayList;
 
 import junit.framework.AssertionFailedError;
 import junit.framework.TestCase;
@@ -38,4 +39,24 @@
             throw new AssertionFailedError("Identified bug 42794");
         }
     }
+    
+    public void testOrdering() throws Exception {
+    	BoundSheetRecord bs1 = new BoundSheetRecord();
+    	BoundSheetRecord bs2 = new BoundSheetRecord();
+    	BoundSheetRecord bs3 = new BoundSheetRecord();
+    	bs1.setPositionOfBof(11);
+    	bs2.setPositionOfBof(33);
+    	bs3.setPositionOfBof(22);
+    	
+    	ArrayList l = new ArrayList();
+    	l.add(bs1);
+    	l.add(bs2);
+    	l.add(bs3);
+    	
+    	BoundSheetRecord[] r = BoundSheetRecord.orderByBofPosition(l);
+    	assertEquals(3, r.length);
+    	assertEquals(bs1, r[0]);
+    	assertEquals(bs3, r[1]);
+    	assertEquals(bs2, r[2]);
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org