]> source.dussan.org Git - poi.git/commitdiff
Allow HSSFSheet to get at its parent workbook, and add HSSFWorkbook.getSheetIndex...
authorNick Burch <nick@apache.org>
Mon, 24 Sep 2007 12:57:38 +0000 (12:57 +0000)
committerNick Burch <nick@apache.org>
Mon, 24 Sep 2007 12:57:38 +0000 (12:57 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@578795 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/changes.xml
src/documentation/content/xdocs/status.xml
src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheetOrder.java

index 97fce850c2240b98d9397bccd4b06caa9670e034..bd3f196e375d414e485b87fc192f30d24c89eb27 100644 (file)
@@ -36,7 +36,8 @@
     </devs>
 
         <release version="3.0.2-FINAL" date="2007-??-??">
-            <action dev="POI-DEVELOPERS" type="fix">Move POIDocument out of Scratchpad, and update HSSFWorkbook to use it</action>
+            <action dev="POI-DEVELOPERS" type="add">Add a getSheetIndex(HSSFSheet) method to HSSFWorkbook, and allow a HSSFSheet to get at its parent HSSFWorkbook</action>
+            <action dev="POI-DEVELOPERS" type="add">Move POIDocument out of Scratchpad, and update HSSFWorkbook to use it</action>
             <action dev="POI-DEVELOPERS" type="fix">43399 - [PATCH] - Fix for Cell References for rows > 32678</action>
             <action dev="POI-DEVELOPERS" type="fix">43410 - [PATCH] - Improved Formula Parser support for numbers and ranges</action>
             <action dev="POI-DEVELOPERS" type="add">When writing HSLF files out, optionally preserve all OLE2 nodes (default is just the HSLF related nodes)</action>
index e5cde9195dd8123c99524a42ff1633eb39a6b9f3..074b386de02fb8e5b2b23d74c0f1b7bd42d6b38b 100644 (file)
@@ -33,7 +33,8 @@
 
     <changes>
         <release version="3.0.2-FINAL" date="2007-??-??">
-            <action dev="POI-DEVELOPERS" type="fix">Move POIDocument out of Scratchpad, and update HSSFWorkbook to use it</action>
+            <action dev="POI-DEVELOPERS" type="add">Add a getSheetIndex(HSSFSheet) method to HSSFWorkbook, and allow a HSSFSheet to get at its parent HSSFWorkbook</action>
+            <action dev="POI-DEVELOPERS" type="add">Move POIDocument out of Scratchpad, and update HSSFWorkbook to use it</action>
             <action dev="POI-DEVELOPERS" type="fix">43399 - [PATCH] - Fix for Cell References for rows > 32678</action>
             <action dev="POI-DEVELOPERS" type="fix">43410 - [PATCH] - Improved Formula Parser support for numbers and ranges</action>
             <action dev="POI-DEVELOPERS" type="add">When writing HSLF files out, optionally preserve all OLE2 nodes (default is just the HSLF related nodes)</action>
index bf5246cb28c60527e355258b52f3f26a007ed146..9d7c287cb822ae3a9f00bc99d79773e41c96066d 100644 (file)
@@ -84,6 +84,7 @@ public class HSSFSheet
     private Sheet sheet;
     private TreeMap rows;
     private Workbook book;
+    private HSSFWorkbook workbook;
     private int firstrow;
     private int lastrow;
     private static POILogger log = POILogFactory.getLogger(HSSFSheet.class);
@@ -92,36 +93,38 @@ public class HSSFSheet
      * Creates new HSSFSheet   - called by HSSFWorkbook to create a sheet from
      * scratch.  You should not be calling this from application code (its protected anyhow).
      *
-     * @param book - lowlevel Workbook object associated with the sheet.
+     * @param workbook - The HSSF Workbook object associated with the sheet.
      * @see org.apache.poi.hssf.usermodel.HSSFWorkbook#createSheet()
      */
 
-    protected HSSFSheet(Workbook book)
+    protected HSSFSheet(HSSFWorkbook workbook)
     {
         sheet = Sheet.createSheet();
         rows = new TreeMap();   // new ArrayList(INITIAL_CAPACITY);
-        this.book = book;
+        this.workbook = workbook;
+        this.book = workbook.getWorkbook();
     }
 
     /**
      * Creates an HSSFSheet representing the given Sheet object.  Should only be
      * called by HSSFWorkbook when reading in an exisiting file.
      *
-     * @param book - lowlevel Workbook object associated with the sheet.
+     * @param workbook - The HSSF Workbook object associated with the sheet.
      * @param sheet - lowlevel Sheet object this sheet will represent
      * @see org.apache.poi.hssf.usermodel.HSSFWorkbook#createSheet()
      */
 
-    protected HSSFSheet(Workbook book, Sheet sheet)
+    protected HSSFSheet(HSSFWorkbook workbook, Sheet sheet)
     {
         this.sheet = sheet;
         rows = new TreeMap();
-        this.book = book;
+        this.workbook = workbook;
+        this.book = workbook.getWorkbook();
         setPropertiesFromSheet(sheet);
     }
 
-    HSSFSheet cloneSheet(Workbook book) {
-      return new HSSFSheet(book, sheet.cloneSheet());
+    HSSFSheet cloneSheet(HSSFWorkbook workbook) {
+      return new HSSFSheet(workbook, sheet.cloneSheet());
     }
 
 
index 87482709981af7c3ef764d8019ab7dfe04d23ff8..691dc1e4d05d3a028a6adec7f9ca5fe51772a78f 100644 (file)
@@ -223,7 +223,7 @@ public class HSSFWorkbook extends POIDocument
                 break;
             }
 
-            HSSFSheet hsheet = new HSSFSheet(workbook, sheet);
+            HSSFSheet hsheet = new HSSFSheet(this, sheet);
 
             sheets.add(hsheet);
 
@@ -462,6 +462,20 @@ public class HSSFWorkbook extends POIDocument
         return retval;
     }
 
+    /** Returns the index of the given sheet
+     * @param sheet the sheet to look up
+     * @return index of the sheet (0 based)
+     */
+    public int getSheetIndex(HSSFSheet sheet)
+    {
+       for(int i=0; i<sheets.size(); i++) {
+               if(sheets.get(i) == sheet) {
+                       return i;
+               }
+       }
+       return -1;
+    }
+
     /**
      * create an HSSFSheet for this HSSFWorkbook, adds it to the sheets and returns
      * the high level representation.  Use this to create new sheets.
@@ -474,7 +488,7 @@ public class HSSFWorkbook extends POIDocument
 
 //        if (getNumberOfSheets() == 3)
 //            throw new RuntimeException("You cannot have more than three sheets in HSSF 1.0");
-        HSSFSheet sheet = new HSSFSheet(workbook);
+        HSSFSheet sheet = new HSSFSheet(this);
 
         sheets.add(sheet);
         workbook.setSheetName(sheets.size() - 1,
@@ -495,7 +509,7 @@ public class HSSFWorkbook extends POIDocument
       HSSFSheet srcSheet = (HSSFSheet)sheets.get(sheetNum);
       String srcName = workbook.getSheetName(sheetNum);
       if (srcSheet != null) {
-        HSSFSheet clonedSheet = srcSheet.cloneSheet(workbook);
+        HSSFSheet clonedSheet = srcSheet.cloneSheet(this);
         WindowTwoRecord windowTwo = (WindowTwoRecord) clonedSheet.getSheet().findFirstRecordBySid(WindowTwoRecord.sid);
         windowTwo.setSelected(sheets.size() == 1);
         windowTwo.setPaged(sheets.size() == 1);
@@ -534,7 +548,7 @@ public class HSSFWorkbook extends POIDocument
         if (workbook.doesContainsSheetName( sheetname, sheets.size() ))
             throw new IllegalArgumentException( "The workbook already contains a sheet of this name" );
 
-        HSSFSheet sheet = new HSSFSheet(workbook);
+        HSSFSheet sheet = new HSSFSheet(this);
 
         sheets.add(sheet);
         workbook.setSheetName(sheets.size() - 1, sheetname);
index 6aa8fee3fc8c07758848e806cf836d855f350f2d..450a4e8292b7298e94eaceab5c87d804882115b8 100644 (file)
@@ -19,6 +19,9 @@
 
 package org.apache.poi.hssf.usermodel;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+
 import junit.framework.TestCase;
 
 import org.apache.poi.hssf.model.Sheet;
@@ -52,17 +55,59 @@ public class TestHSSFSheetOrder
                        HSSFSheet s = wb.createSheet("Sheet " + i);
                        Sheet sheet = s.getSheet();
         }
+        
+        // Check the initial order
+        assertEquals(0, wb.getSheetIndex("Sheet 0"));
+        assertEquals(1, wb.getSheetIndex("Sheet 1"));
+        assertEquals(2, wb.getSheetIndex("Sheet 2"));
+        assertEquals(3, wb.getSheetIndex("Sheet 3"));
+        assertEquals(4, wb.getSheetIndex("Sheet 4"));
+        assertEquals(5, wb.getSheetIndex("Sheet 5"));
+        assertEquals(6, wb.getSheetIndex("Sheet 6"));
+        assertEquals(7, wb.getSheetIndex("Sheet 7"));
+        assertEquals(8, wb.getSheetIndex("Sheet 8"));
+        assertEquals(9, wb.getSheetIndex("Sheet 9"));
 
+        // Change
         wb.getWorkbook().setSheetOrder("Sheet 6", 0);
-         wb.getWorkbook().setSheetOrder("Sheet 3", 7);
-         wb.getWorkbook().setSheetOrder("Sheet 1", 9);
+        wb.getWorkbook().setSheetOrder("Sheet 3", 7);
+        wb.getWorkbook().setSheetOrder("Sheet 1", 9);
+        
+        // Check they're currently right
+        assertEquals(0, wb.getSheetIndex("Sheet 6"));
+        assertEquals(1, wb.getSheetIndex("Sheet 0"));
+        assertEquals(2, wb.getSheetIndex("Sheet 2"));
+        assertEquals(3, wb.getSheetIndex("Sheet 4"));
+        assertEquals(4, wb.getSheetIndex("Sheet 5"));
+        assertEquals(5, wb.getSheetIndex("Sheet 7"));
+        assertEquals(6, wb.getSheetIndex("Sheet 3"));
+        assertEquals(7, wb.getSheetIndex("Sheet 8"));
+        assertEquals(8, wb.getSheetIndex("Sheet 9"));
+        assertEquals(9, wb.getSheetIndex("Sheet 1"));
           
-          //TODO read it in and see if it is correct. 
-         
-        
+        // Read it in and see if it is correct.
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        wb.write(baos);
+        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+        HSSFWorkbook wbr = new HSSFWorkbook(bais);
+        
+        assertEquals(0, wbr.getSheetIndex("Sheet 6"));
+        assertEquals(1, wbr.getSheetIndex("Sheet 0"));
+        assertEquals(2, wbr.getSheetIndex("Sheet 2"));
+        assertEquals(3, wbr.getSheetIndex("Sheet 4"));
+        assertEquals(4, wbr.getSheetIndex("Sheet 5"));
+        assertEquals(5, wbr.getSheetIndex("Sheet 7"));
+        assertEquals(6, wbr.getSheetIndex("Sheet 3"));
+        assertEquals(7, wbr.getSheetIndex("Sheet 8"));
+        assertEquals(8, wbr.getSheetIndex("Sheet 9"));
+        assertEquals(9, wbr.getSheetIndex("Sheet 1"));
+        
+        // Now get the index by the sheet, not the name
+        for(int i=0; i<10; i++) {
+               HSSFSheet s = wbr.getSheetAt(i);
+               assertEquals(i, wbr.getSheetIndex(s));
+        }
     }
-
-
 }