</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>
<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>
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);
* 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());
}
break;
}
- HSSFSheet hsheet = new HSSFSheet(workbook, sheet);
+ HSSFSheet hsheet = new HSSFSheet(this, sheet);
sheets.add(hsheet);
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.
// 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,
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);
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);
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;
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));
+ }
}
-
-
}