? src/testcases/org/apache/poi/hssf/data/namedinput.xls
? src/testcases/org/apache/poi/hssf/data/SimpleWithPrintArea.xls
? src/testcases/org/apache/poi/hssf/util/TestRangeAddress.java
Index: src/java/org/apache/poi/hssf/model/Workbook.java
===================================================================
RCS file: /home/cvspublic/jakarta-poi/src/java/org/apache/poi/hssf/model/Workbook.java,v
retrieving revision 1.25
diff -u -r1.25 Workbook.java
--- src/java/org/apache/poi/hssf/model/Workbook.java 6 Feb 2003 10:29:44 -0000 1.25
+++ src/java/org/apache/poi/hssf/model/Workbook.java 25 Feb 2003 19:37:09 -0000
@@ -335,6 +335,29 @@
return retval;
}
+
+ /**Retrieves the Builtin NameRecord that matches the name and index
+ * There shouldn't be too many names to make the sequential search too slow
+ * @param name byte representation of the builtin name to match
+ * @param sheetIndex zero-based sheet reference
+ * @return null if no builtin NameRecord matches
+ */
+ public NameRecord getSpecificBuiltinRecord(byte name, int sheetIndex)
+ {
+ Iterator iterator = names.iterator();
+ while (iterator.hasNext()) {
+ NameRecord record = ( NameRecord ) iterator.next();
+
+ //print areas are one based
+ if (record.getBuiltInName() == name && record.getIndexToSheet() == sheetIndex) {
+ return record;
+ }
+ }
+
+ return null;
+
+ }
+
public int getNumRecords() {
return records.size();
}
@@ -1804,6 +1827,7 @@
return name;
}
+
/** creates new name
* @return new name record
*/
@@ -1819,6 +1843,22 @@
return name;
}
+ /**Generates a NameRecord to represent a built-in region
+ * @return a new NameRecord unless the index is invalid
+ */
+ public NameRecord createBuiltInName(byte builtInName, int index)
+ {
+ if (index == -1 || index+1 > (int)Short.MAX_VALUE)
+ throw new IllegalArgumentException("Index is not valid ["+index+"]");
+
+ NameRecord name = new NameRecord(builtInName, (short)(index));
+
+ addName(name);
+
+ return name;
+ }
+
+
/** removes the name
* @param namenum name index
*/
@@ -2005,4 +2045,7 @@
}
return palette;
}
+
+
}
+
Index: src/java/org/apache/poi/hssf/model/WorkbookRecordList.java
===================================================================
RCS file: /home/cvspublic/jakarta-poi/src/java/org/apache/poi/hssf/model/WorkbookRecordList.java,v
retrieving revision 1.1
diff -u -r1.1 WorkbookRecordList.java
--- src/java/org/apache/poi/hssf/model/WorkbookRecordList.java 6 Feb 2003 10:29:44 -0000 1.1
+++ src/java/org/apache/poi/hssf/model/WorkbookRecordList.java 25 Feb 2003 19:37:09 -0000
@@ -1,10 +1,65 @@
-package org.apache.poi.hssf.model;
-import org.apache.poi.hssf.record.Record;
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2002 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache POI" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache POI", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ *
- * Description: Defined a area in Extern Sheet.
- * REFERENCE:
- * @author Libin Roman (Vista Portal LDT. Developer)
- * @author avik
- * @author Jason Height (jheight at chariot dot net dot au)
- * @version 1.0-pre
- */
-
-public class Area3DPtg extends Ptg
-{
- public final static byte sid = 0x3b;
- private final static int SIZE = 11; // 10 + 1 for Ptg
- private short field_1_index_extern_sheet;
- private short field_2_first_row;
- private short field_3_last_row;
- private short field_4_first_column;
- private short field_5_last_column;
-
- private BitField rowRelative = new BitField( 0x8000 );
- private BitField colRelative = new BitField( 0x4000 );
-
- /** Creates new AreaPtg */
- public Area3DPtg()
- {
- }
-
- public Area3DPtg( String arearef, short externIdx )
- {
- AreaReference ar = new AreaReference( arearef );
-
- setFirstRow( (short) ar.getCells()[0].getRow() );
- setFirstColumn( (short) ar.getCells()[0].getCol() );
- setLastRow( (short) ar.getCells()[1].getRow() );
- setLastColumn( (short) ar.getCells()[1].getCol() );
- setFirstColRelative( !ar.getCells()[0].isColAbsolute() );
- setLastColRelative( !ar.getCells()[1].isColAbsolute() );
- setFirstRowRelative( !ar.getCells()[0].isRowAbsolute() );
- setLastRowRelative( !ar.getCells()[1].isRowAbsolute() );
- setExternSheetIndex( externIdx );
-
- }
-
- public Area3DPtg( byte[] data, int offset )
- {
- offset++;
- field_1_index_extern_sheet = LittleEndian.getShort( data, 0 + offset );
- field_2_first_row = LittleEndian.getShort( data, 2 + offset );
- field_3_last_row = LittleEndian.getShort( data, 4 + offset );
- field_4_first_column = LittleEndian.getShort( data, 6 + offset );
- field_5_last_column = LittleEndian.getShort( data, 8 + offset );
- }
-
- public String toString()
- {
- StringBuffer buffer = new StringBuffer();
-
- buffer.append( "AreaPtg\n" );
- buffer.append( "Index to Extern Sheet = " + getExternSheetIndex() ).append( "\n" );
- buffer.append( "firstRow = " + getFirstRow() ).append( "\n" );
- buffer.append( "lastRow = " + getLastRow() ).append( "\n" );
- buffer.append( "firstCol = " + getFirstColumn() ).append( "\n" );
- buffer.append( "lastCol = " + getLastColumn() ).append( "\n" );
- buffer.append( "firstColRel= "
- + isFirstRowRelative() ).append( "\n" );
- buffer.append( "lastColRowRel = "
- + isLastRowRelative() ).append( "\n" );
- buffer.append( "firstColRel = " + isFirstColRelative() ).append( "\n" );
- buffer.append( "lastColRel = " + isLastColRelative() ).append( "\n" );
- return buffer.toString();
- }
-
- public void writeBytes( byte[] array, int offset )
- {
- array[0 + offset] = (byte) ( sid + ptgClass );
- LittleEndian.putShort( array, 1 + offset, getExternSheetIndex() );
- LittleEndian.putShort( array, 3 + offset, getFirstRow() );
- LittleEndian.putShort( array, 5 + offset, getLastRow() );
- LittleEndian.putShort( array, 7 + offset, getFirstColumnRaw() );
- LittleEndian.putShort( array, 9 + offset, getLastColumnRaw() );
- }
-
- public int getSize()
- {
- return SIZE;
- }
-
- public short getExternSheetIndex()
- {
- return field_1_index_extern_sheet;
- }
-
- public void setExternSheetIndex( short index )
- {
- field_1_index_extern_sheet = index;
- }
-
- public short getFirstRow()
- {
- return field_2_first_row;
- }
-
- public void setFirstRow( short row )
- {
- field_2_first_row = row;
- }
-
- public short getLastRow()
- {
- return field_3_last_row;
- }
-
- public void setLastRow( short row )
- {
- field_3_last_row = row;
- }
-
- public short getFirstColumn()
- {
- return (short) ( field_4_first_column & 0xFF );
- }
-
- public short getFirstColumnRaw()
- {
- return field_4_first_column;
- }
-
- public boolean isFirstRowRelative()
- {
- return rowRelative.isSet( field_4_first_column );
- }
-
- public boolean isFirstColRelative()
- {
- return colRelative.isSet( field_4_first_column );
- }
-
- public void setFirstColumn( short column )
- {
- field_4_first_column &= 0xFF00;
- field_4_first_column |= column & 0xFF;
- }
-
- public void setFirstColumnRaw( short column )
- {
- field_4_first_column = column;
- }
-
- public short getLastColumn()
- {
- return (short) ( field_5_last_column & 0xFF );
- }
-
- public short getLastColumnRaw()
- {
- return field_5_last_column;
- }
-
- public boolean isLastRowRelative()
- {
- return rowRelative.isSet( field_5_last_column );
- }
-
- public boolean isLastColRelative()
- {
- return colRelative.isSet( field_5_last_column );
- }
-
- public void setLastColumn( short column )
- {
- field_5_last_column &= 0xFF00;
- field_5_last_column |= column & 0xFF;
- }
-
- public void setLastColumnRaw( short column )
- {
- field_5_last_column = column;
- }
-
- /**
- * sets the first row to relative or not
- * @param isRelative or not.
- */
- public void setFirstRowRelative( boolean rel )
- {
- field_4_first_column = rowRelative.setShortBoolean( field_4_first_column, rel );
- }
-
- /**
- * set whether the first column is relative
- */
- public void setFirstColRelative( boolean rel )
- {
- field_4_first_column = colRelative.setShortBoolean( field_4_first_column, rel );
- }
-
- /**
- * set whether the last row is relative or not
- * @param last row relative
- */
- public void setLastRowRelative( boolean rel )
- {
- field_5_last_column = rowRelative.setShortBoolean( field_5_last_column, rel );
- }
-
- /**
- * set whether the last column should be relative or not
- */
- public void setLastColRelative( boolean rel )
- {
- field_5_last_column = colRelative.setShortBoolean( field_5_last_column, rel );
- }
-
-
- /*public String getArea(){
- RangeAddress ra = new RangeAddress( getFirstColumn(),getFirstRow() + 1, getLastColumn(), getLastRow() + 1);
- String result = ra.getAddress();
-
- return result;
- }*/
-
- public void setArea( String ref )
- {
- RangeAddress ra = new RangeAddress( ref );
-
- String from = ra.getFromCell();
- String to = ra.getToCell();
-
- setFirstColumn( (short) ( ra.getXPosition( from ) - 1 ) );
- setFirstRow( (short) ( ra.getYPosition( from ) - 1 ) );
- setLastColumn( (short) ( ra.getXPosition( to ) - 1 ) );
- setLastRow( (short) ( ra.getYPosition( to ) - 1 ) );
-
- }
-
- public String toFormulaString( SheetReferences refs )
- {
- StringBuffer retval = new StringBuffer();
- if ( refs != null )
- {
- retval.append( refs.getSheetName( this.field_1_index_extern_sheet ) );
- retval.append( '!' );
- }
- retval.append( ( new CellReference( getFirstRow(), getFirstColumn(), !isFirstRowRelative(), !isFirstColRelative() ) ).toString() );
- retval.append( ':' );
- retval.append( ( new CellReference( getLastRow(), getLastColumn(), !isLastRowRelative(), !isLastColRelative() ) ).toString() );
- return retval.toString();
- }
-
- public byte getDefaultOperandClass()
- {
- return Ptg.CLASS_REF;
- }
-
- public Object clone()
- {
- Area3DPtg ptg = new Area3DPtg();
- ptg.field_1_index_extern_sheet = field_1_index_extern_sheet;
- ptg.field_2_first_row = field_2_first_row;
- ptg.field_3_last_row = field_3_last_row;
- ptg.field_4_first_column = field_4_first_column;
- ptg.field_5_last_column = field_5_last_column;
- return ptg;
- }
-
-
- public boolean equals( Object o )
- {
- if ( this == o ) return true;
- if ( !( o instanceof Area3DPtg ) ) return false;
-
- final Area3DPtg area3DPtg = (Area3DPtg) o;
-
- if ( field_1_index_extern_sheet != area3DPtg.field_1_index_extern_sheet ) return false;
- if ( field_2_first_row != area3DPtg.field_2_first_row ) return false;
- if ( field_3_last_row != area3DPtg.field_3_last_row ) return false;
- if ( field_4_first_column != area3DPtg.field_4_first_column ) return false;
- if ( field_5_last_column != area3DPtg.field_5_last_column ) return false;
-
- return true;
- }
-
- public int hashCode()
- {
- int result;
- result = (int) field_1_index_extern_sheet;
- result = 29 * result + (int) field_2_first_row;
- result = 29 * result + (int) field_3_last_row;
- result = 29 * result + (int) field_4_first_column;
- result = 29 * result + (int) field_5_last_column;
- return result;
- }
-
-
-}
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2002 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache POI" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache POI", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ *
+ * Description: Defined a area in Extern Sheet.
+ * REFERENCE:
+ * @author Libin Roman (Vista Portal LDT. Developer) + * @author avik + * @author Jason Height (jheight at chariot dot net dot au) + * @version 1.0-pre + */ + +public class Area3DPtg extends Ptg +{ + public final static byte sid = 0x3b; + private final static int SIZE = 11; // 10 + 1 for Ptg + private short field_1_index_extern_sheet; + private short field_2_first_row; + private short field_3_last_row; + private short field_4_first_column; + private short field_5_last_column; + + private BitField rowRelative = new BitField( 0x8000 ); + private BitField colRelative = new BitField( 0x4000 ); + + /** Creates new AreaPtg */ + public Area3DPtg() + { + } + + public Area3DPtg( String arearef, short externIdx ) + { + setArea(arearef); + setExternSheetIndex( externIdx ); + + } + + public Area3DPtg( byte[] data, int offset ) + { + offset++; + field_1_index_extern_sheet = LittleEndian.getShort( data, 0 + offset ); + field_2_first_row = LittleEndian.getShort( data, 2 + offset ); + field_3_last_row = LittleEndian.getShort( data, 4 + offset ); + field_4_first_column = LittleEndian.getShort( data, 6 + offset ); + field_5_last_column = LittleEndian.getShort( data, 8 + offset ); + } + + public String toString() + { + StringBuffer buffer = new StringBuffer(); + + buffer.append( "AreaPtg\n" ); + buffer.append( "Index to Extern Sheet = " + getExternSheetIndex() ).append( "\n" ); + buffer.append( "firstRow = " + getFirstRow() ).append( "\n" ); + buffer.append( "lastRow = " + getLastRow() ).append( "\n" ); + buffer.append( "firstCol = " + getFirstColumn() ).append( "\n" ); + buffer.append( "lastCol = " + getLastColumn() ).append( "\n" ); + buffer.append( "firstColRel= " + + isFirstRowRelative() ).append( "\n" ); + buffer.append( "lastColRowRel = " + + isLastRowRelative() ).append( "\n" ); + buffer.append( "firstColRel = " + isFirstColRelative() ).append( "\n" ); + buffer.append( "lastColRel = " + isLastColRelative() ).append( "\n" ); + return buffer.toString(); + } + + public void writeBytes( byte[] array, int offset ) + { + array[0 + offset] = (byte) ( sid + ptgClass ); + LittleEndian.putShort( array, 1 + offset, getExternSheetIndex() ); + LittleEndian.putShort( array, 3 + offset, getFirstRow() ); + LittleEndian.putShort( array, 5 + offset, getLastRow() ); + LittleEndian.putShort( array, 7 + offset, getFirstColumnRaw() ); + LittleEndian.putShort( array, 9 + offset, getLastColumnRaw() ); + } + + public int getSize() + { + return SIZE; + } + + public short getExternSheetIndex() + { + return field_1_index_extern_sheet; + } + + public void setExternSheetIndex( short index ) + { + field_1_index_extern_sheet = index; + } + + public short getFirstRow() + { + return field_2_first_row; + } + + public void setFirstRow( short row ) + { + field_2_first_row = row; + } + + public short getLastRow() + { + return field_3_last_row; + } + + public void setLastRow( short row ) + { + field_3_last_row = row; + } + + public short getFirstColumn() + { + return (short) ( field_4_first_column & 0xFF ); + } + + public short getFirstColumnRaw() + { + return field_4_first_column; + } + + public boolean isFirstRowRelative() + { + return rowRelative.isSet( field_4_first_column ); + } + + public boolean isFirstColRelative() + { + return colRelative.isSet( field_4_first_column ); + } + + public void setFirstColumn( short column ) + { + field_4_first_column &= 0xFF00; + field_4_first_column |= column & 0xFF; + } + + public void setFirstColumnRaw( short column ) + { + field_4_first_column = column; + } + + public short getLastColumn() + { + return (short) ( field_5_last_column & 0xFF ); + } + + public short getLastColumnRaw() + { + return field_5_last_column; + } + + public boolean isLastRowRelative() + { + return rowRelative.isSet( field_5_last_column ); + } + + public boolean isLastColRelative() + { + return colRelative.isSet( field_5_last_column ); + } + + public void setLastColumn( short column ) + { + field_5_last_column &= 0xFF00; + field_5_last_column |= column & 0xFF; + } + + public void setLastColumnRaw( short column ) + { + field_5_last_column = column; + } + + /** + * sets the first row to relative or not + * @param isRelative or not. + */ + public void setFirstRowRelative( boolean rel ) + { + field_4_first_column = rowRelative.setShortBoolean( field_4_first_column, rel ); + } + + /** + * set whether the first column is relative + */ + public void setFirstColRelative( boolean rel ) + { + field_4_first_column = colRelative.setShortBoolean( field_4_first_column, rel ); + } + + /** + * set whether the last row is relative or not + * @param last row relative + */ + public void setLastRowRelative( boolean rel ) + { + field_5_last_column = rowRelative.setShortBoolean( field_5_last_column, rel ); + } + + /** + * set whether the last column should be relative or not + */ + public void setLastColRelative( boolean rel ) + { + field_5_last_column = colRelative.setShortBoolean( field_5_last_column, rel ); + } + + + /*public String getArea(){ + RangeAddress ra = new RangeAddress( getFirstColumn(),getFirstRow() + 1, getLastColumn(), getLastRow() + 1); + String result = ra.getAddress(); + + return result; + }*/ + + public void setArea( String ref ) + { + AreaReference ar = new AreaReference( ref ); + + setFirstRow( (short) ar.getCells()[0].getRow() ); + setFirstColumn( (short) ar.getCells()[0].getCol() ); + setLastRow( (short) ar.getCells()[1].getRow() ); + setLastColumn( (short) ar.getCells()[1].getCol() ); + setFirstColRelative( !ar.getCells()[0].isColAbsolute() ); + setLastColRelative( !ar.getCells()[1].isColAbsolute() ); + setFirstRowRelative( !ar.getCells()[0].isRowAbsolute() ); + setLastRowRelative( !ar.getCells()[1].isRowAbsolute() ); + + } + + public String toFormulaString( SheetReferences refs ) + { + StringBuffer retval = new StringBuffer(); + if ( refs != null ) + { + retval.append( refs.getSheetName( this.field_1_index_extern_sheet ) ); + retval.append( '!' ); + } + retval.append( ( new CellReference( getFirstRow(), getFirstColumn(), !isFirstRowRelative(), !isFirstColRelative() ) ).toString() ); + retval.append( ':' ); + retval.append( ( new CellReference( getLastRow(), getLastColumn(), !isLastRowRelative(), !isLastColRelative() ) ).toString() ); + return retval.toString(); + } + + public byte getDefaultOperandClass() + { + return Ptg.CLASS_REF; + } + + public Object clone() + { + Area3DPtg ptg = new Area3DPtg(); + ptg.field_1_index_extern_sheet = field_1_index_extern_sheet; + ptg.field_2_first_row = field_2_first_row; + ptg.field_3_last_row = field_3_last_row; + ptg.field_4_first_column = field_4_first_column; + ptg.field_5_last_column = field_5_last_column; + return ptg; + } + + + public boolean equals( Object o ) + { + if ( this == o ) return true; + if ( !( o instanceof Area3DPtg ) ) return false; + + final Area3DPtg area3DPtg = (Area3DPtg) o; + + if ( field_1_index_extern_sheet != area3DPtg.field_1_index_extern_sheet ) return false; + if ( field_2_first_row != area3DPtg.field_2_first_row ) return false; + if ( field_3_last_row != area3DPtg.field_3_last_row ) return false; + if ( field_4_first_column != area3DPtg.field_4_first_column ) return false; + if ( field_5_last_column != area3DPtg.field_5_last_column ) return false; + + return true; + } + + public int hashCode() + { + int result; + result = (int) field_1_index_extern_sheet; + result = 29 * result + (int) field_2_first_row; + result = 29 * result + (int) field_3_last_row; + result = 29 * result + (int) field_4_first_column; + result = 29 * result + (int) field_5_last_column; + return result; + } + + +} + Index: src/java/org/apache/poi/hssf/usermodel/HSSFName.java =================================================================== RCS file: /home/cvspublic/jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFName.java,v retrieving revision 1.6 diff -u -r1.6 HSSFName.java --- src/java/org/apache/poi/hssf/usermodel/HSSFName.java 27 Dec 2002 10:51:33 -0000 1.6 +++ src/java/org/apache/poi/hssf/usermodel/HSSFName.java 25 Feb 2003 19:37:09 -0000 @@ -161,11 +161,8 @@ setSheetName(sheetName); } - if (ra.getFromCell().equals(ra.getToCell()) == false) { - name.setAreaReference(ra.getFromCell() + ":" + ra.getToCell()); - } else { - name.setAreaReference(ra.getFromCell()); - } + //allow the poi utilities to parse it out + name.setAreaReference(ref); } Index: src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java =================================================================== RCS file: /home/cvspublic/jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java,v retrieving revision 1.20 diff -u -r1.20 HSSFWorkbook.java --- src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java 6 Feb 2003 10:29:45 -0000 1.20 +++ src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java 25 Feb 2003 19:37:10 -0000 @@ -523,21 +523,14 @@ } if ( nameRecord == null ) { - nameRecord = workbook.createName(); + nameRecord = workbook.createBuiltInName(NameRecord.BUILTIN_PRINT_TITLE, externSheetIndex+1); + //does a lot of the house keeping for builtin records, like setting lengths to zero etc isNewRecord = true; } - nameRecord.setOptionFlag((short)0x20); - nameRecord.setKeyboardShortcut((byte)0); + short definitionTextLength = settingRowAndColumn ? (short)0x001a : (short)0x000b; nameRecord.setDefinitionTextLength(definitionTextLength); - nameRecord.setNameTextLength((byte)1); - nameRecord.setNameText(((char)7) + ""); - nameRecord.setUnused((short)0); - nameRecord.setEqualsToIndexToSheet((short)(externSheetIndex+1)); - nameRecord.setCustomMenuLength((byte)0); - nameRecord.setDescriptionTextLength((byte)0); - nameRecord.setHelpTopicLength((byte)0); - nameRecord.setStatusBarLength((byte)0); + Stack ptgs = new Stack(); if (settingRowAndColumn) @@ -819,6 +812,43 @@ return result; } + + /** + * Sets the printarea for the sheet provided + *
+ * i.e. Reference = Sheet2!$A$1:$B$2 + * @param sheetIndex Zero-based sheet index (0 Represents the first sheet to keep consistent with java) + * @param reference Valid name Reference for the Print Area + */ + public void setPrintArea(int sheetIndex, String reference) + { + NameRecord name = workbook.getSpecificBuiltinRecord(NameRecord.BUILTIN_PRINT_AREA, sheetIndex+1); + + + if (name == null) + name = workbook.createBuiltInName(NameRecord.BUILTIN_PRINT_AREA, sheetIndex+1); + //adding one here because 0 indicates a global named region; doesnt make sense for print areas + + HSSFName nameWrapper = new HSSFName(workbook, name); + //the external name does some housekeeping, refactor to lower level? + + nameWrapper.setReference(reference); + } + + + /** + * Retrieves the reference for the printarea of the specified sheet + * @param sheetIndex Zero-based sheet index (0 Represents the first sheet to keep consistent with java) + * @return String Null if no print area has been defined + */ + public String getPrintArea(int sheetIndex) + { + NameRecord name = workbook.getSpecificBuiltinRecord(NameRecord.BUILTIN_PRINT_AREA, sheetIndex+1); + if (name == null) return null; + //adding one here because 0 indicates a global named region; doesnt make sense for print areas + + return name.getAreaReference(workbook.getSheetReferences()); + } /** creates a new named range and add it to the model Index: src/java/org/apache/poi/hssf/util/RangeAddress.java =================================================================== RCS file: /home/cvspublic/jakarta-poi/src/java/org/apache/poi/hssf/util/RangeAddress.java,v retrieving revision 1.2 diff -u -r1.2 RangeAddress.java --- src/java/org/apache/poi/hssf/util/RangeAddress.java 29 Apr 2002 01:25:28 -0000 1.2 +++ src/java/org/apache/poi/hssf/util/RangeAddress.java 25 Feb 2003 19:37:10 -0000 @@ -62,7 +62,7 @@ * * REFERENCE:
* @author IgOr KaTz && EuGeNe BuMaGiN (Tal Moshaiov) (VistaPortal LDT.) - * @version 1.0 +@version 1.0 */ public class RangeAddress { @@ -72,7 +72,13 @@ String m_sheetName; String m_cellFrom; String m_cellTo; - + + /** + * Accepts an external reference from excel. + *
+ * i.e. Sheet1!$A$4:$B$9
+ * @param _url
+ */
public RangeAddress (String _url) {
init (_url);
}
@@ -82,10 +88,14 @@
+ numTo26Sys (_endCol) + _endRow);
}
+ /**
+ *
+ * @return String note: All absolute references are removed
+ */
public String getAddress (){
String result = "";
if(m_sheetName != null)
- result += m_sheetName;
+ result += m_sheetName+"!";
if(m_cellFrom != null){
result += m_cellFrom;
if(m_cellTo != null)
@@ -94,6 +104,7 @@
return result;
}
+
public String getSheetName (){
return m_sheetName;
}
@@ -231,21 +242,21 @@
if (index >= 0) {
String fromStr = _url.substring(0, index);
String toStr = _url.substring(index+1);
- index = fromStr.indexOf('.');
+ index = fromStr.indexOf('!');
if (index >= 0) {
result[0] = fromStr.substring(0, index);
result[1] = fromStr.substring(index+1);
} else {
result[1] = fromStr;
}
- index = toStr.indexOf('.');
+ index = toStr.indexOf('!');
if (index >= 0) {
result[2] = toStr.substring(index+1);
} else {
result[2] = toStr;
}
} else {
- index = _url.indexOf('.');
+ index = _url.indexOf('!');
if (index >= 0) {
result[0] = _url.substring(0, index);
result[1] = _url.substring(index+1);
Index: src/testcases/org/apache/poi/hssf/HSSFTests.java
===================================================================
RCS file: /home/cvspublic/jakarta-poi/src/testcases/org/apache/poi/hssf/HSSFTests.java,v
retrieving revision 1.3
diff -u -r1.3 HSSFTests.java
--- src/testcases/org/apache/poi/hssf/HSSFTests.java 2 Jan 2003 11:17:57 -0000 1.3
+++ src/testcases/org/apache/poi/hssf/HSSFTests.java 25 Feb 2003 19:37:11 -0000
@@ -63,6 +63,7 @@
import org.apache.poi.hssf.util.TestAreaReference;
import org.apache.poi.hssf.util.TestCellReference;
import org.apache.poi.hssf.util.TestRKUtil;
+import org.apache.poi.hssf.util.TestRangeAddress;
import org.apache.poi.hssf.util.TestSheetReferences;
/**
@@ -144,6 +145,7 @@
suite.addTest(new TestSuite(TestRowRecordsAggregate.class));
suite.addTest(new TestSuite(TestAreaReference.class));
suite.addTest(new TestSuite(TestCellReference.class));
+ suite.addTest(new TestSuite(TestRangeAddress.class));
suite.addTest(new TestSuite(TestRKUtil.class));
suite.addTest(new TestSuite(TestSheetReferences.class));
Index: src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java
===================================================================
RCS file: /home/cvspublic/jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java,v
retrieving revision 1.6
diff -u -r1.6 TestHSSFCell.java
--- src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java 26 Jan 2003 20:34:39 -0000 1.6
+++ src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java 25 Feb 2003 19:37:11 -0000
@@ -232,7 +232,7 @@
throws java.io.IOException {
String readFilename = System.getProperty("HSSF.testdata.path");
- File file = File.createTempFile("testBoolErr",".xls");
+ File file = File.createTempFile("testFormulaStyle",".xls");
FileOutputStream out = new FileOutputStream(file);
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet s = wb.createSheet("Sheet1");
Index: src/testcases/org/apache/poi/hssf/usermodel/TestNamedRange.java
===================================================================
RCS file: /home/cvspublic/jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestNamedRange.java,v
retrieving revision 1.4
diff -u -r1.4 TestNamedRange.java
--- src/testcases/org/apache/poi/hssf/usermodel/TestNamedRange.java 6 Feb 2003 10:29:45 -0000 1.4
+++ src/testcases/org/apache/poi/hssf/usermodel/TestNamedRange.java 25 Feb 2003 19:37:11 -0000
@@ -1,27 +1,75 @@
-/*
- * RangeTestTest.java
- * NetBeans JUnit based test
+
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2002 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache POI" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache POI", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
*
- * Created on April 21, 2002, 6:23 PM
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ *
+ * Addresses Bug #9632 + */ + public void testNamedRead() throws IOException + { + FileInputStream fis = null; + POIFSFileSystem fs = null; + HSSFWorkbook wb = null; + + String filename = System.getProperty("HSSF.testdata.path"); + + filename = filename + "/namedinput.xls"; + + + fis = new FileInputStream(filename); + fs = new POIFSFileSystem(fis); + wb = new HSSFWorkbook(fs); + + //Get index of the namedrange with the name = "NamedRangeName" , which was defined in input.xls as A1:D10 + int NamedRangeIndex = wb.getNameIndex("NamedRangeName"); + + //Getting NAmed Range + HSSFName namedRange1 = wb.getNameAt(NamedRangeIndex); + String sheetName = wb.getSheetName(0); + + //Getting its reference + String reference = namedRange1.getReference(); + + fis.close(); + + assertEquals(sheetName+"!$A$1:$D$10", reference); + + HSSFName namedRange2 = wb.getNameAt(1); + + assertEquals(sheetName+"!$D$17:$G$27", namedRange2.getReference()); + assertEquals("SecondNamedRange", namedRange2.getNameName()); + + } + + /** + * Reads an excel file already containing a named range and updates it + *
+ * Addresses Bug #16411 + */ + public void testNamedReadModify() throws IOException + { + FileInputStream fis = null; + POIFSFileSystem fs = null; + HSSFWorkbook wb = null; + + String filename = System.getProperty("HSSF.testdata.path"); + + filename = filename + "/namedinput.xls"; + + + fis = new FileInputStream(filename); + fs = new POIFSFileSystem(fis); + wb = new HSSFWorkbook(fs); + + + HSSFName name = wb.getNameAt(0); + String sheetName = wb.getSheetName(0); + + assertEquals(sheetName+"!$A$1:$D$10", name.getReference()); + + name = wb.getNameAt(1); + String newReference = sheetName +"!$A$1:$C$36"; + + name.setReference(newReference); + assertEquals(newReference, name.getReference()); + + } + + /** + * Test that multiple named ranges can be added written and read + */ + public void testMultipleNamedWrite() + throws IOException + { + HSSFWorkbook wb = new HSSFWorkbook(); + + + HSSFSheet sheet = wb.createSheet("Sheet1"); + String sheetName = wb.getSheetName(0); + + assertEquals("Sheet1", sheetName); + + //Creating new Named Range + HSSFName newNamedRange = wb.createName(); + + newNamedRange.setNameName("RangeTest"); + newNamedRange.setReference(sheetName + "!$D$4:$E$8"); + + //Creating another new Named Range + HSSFName newNamedRange2 = wb.createName(); + + newNamedRange2.setNameName("AnotherTest"); + newNamedRange2.setReference(sheetName + "!$F$1:$G$6"); + + + HSSFName namedRange1 = wb.getNameAt(0); + String referece = namedRange1.getReference(); + + File file = File.createTempFile("testMultiNamedRange", ".xls"); + + FileOutputStream fileOut = new FileOutputStream(file); + wb.write(fileOut); + fileOut.close(); + + + assertTrue("file exists",file.exists()); + + + FileInputStream in = new FileInputStream(file); + wb = new HSSFWorkbook(in); + HSSFName nm =wb.getNameAt(wb.getNameIndex("RangeTest")); + assertTrue("Name is "+nm.getNameName(),"RangeTest".equals(nm.getNameName())); + assertTrue("Reference is "+nm.getReference(),(wb.getSheetName(0)+"!$D$4:$E$8").equals(nm.getReference())); + + nm = wb.getNameAt(wb.getNameIndex("AnotherTest")); + assertTrue("Name is "+nm.getNameName(),"AnotherTest".equals(nm.getNameName())); + assertTrue("Reference is "+nm.getReference(),newNamedRange2.getReference().equals(nm.getReference())); + + + } + + /** + * Test case provided by czhang@cambian.com (Chun Zhang) + *
+ * Addresses Bug #13775 + * @throws IOException + */ + public void testMultiNamedRange() + throws IOException + { + + // Create a new workbook + HSSFWorkbook wb = new HSSFWorkbook (); + + + // Create a worksheet 'sheet1' in the new workbook + wb.createSheet (); + wb.setSheetName (0, "sheet1"); + + // Create another worksheet 'sheet2' in the new workbook + wb.createSheet (); + wb.setSheetName (1, "sheet2"); + + // Create a new named range for worksheet 'sheet1' + HSSFName namedRange1 = wb.createName(); + + // Set the name for the named range for worksheet 'sheet1' + namedRange1.setNameName("RangeTest1"); + + // Set the reference for the named range for worksheet 'sheet1' + namedRange1.setReference("sheet1" + "!$A$1:$L$41"); + + // Create a new named range for worksheet 'sheet2' + HSSFName namedRange2 = wb.createName(); + + // Set the name for the named range for worksheet 'sheet2' + namedRange2.setNameName("RangeTest2"); + + // Set the reference for the named range for worksheet 'sheet2' + namedRange2.setReference("sheet2" + "!$A$1:$O$21"); + + // Write the workbook to a file + File file = File.createTempFile("testMuiltipletNamedRanges", ".xls"); + FileOutputStream fileOut = new FileOutputStream(file); + wb.write(fileOut); + fileOut.close(); + + assertTrue("file exists",file.exists()); + + // Read the Excel file and verify its content + FileInputStream in = new FileInputStream(file); + wb = new HSSFWorkbook(in); + HSSFName nm1 =wb.getNameAt(wb.getNameIndex("RangeTest1")); + assertTrue("Name is "+nm1.getNameName(),"RangeTest1".equals(nm1.getNameName())); + assertTrue("Reference is "+nm1.getReference(),(wb.getSheetName(0)+"!$A$1:$L$41").equals(nm1.getReference())); + + HSSFName nm2 =wb.getNameAt(wb.getNameIndex("RangeTest2")); + assertTrue("Name is "+nm2.getNameName(),"RangeTest2".equals(nm2.getNameName())); + assertTrue("Reference is "+nm2.getReference(),(wb.getSheetName(1)+"!$A$1:$O$21").equals(nm2.getReference())); + } + + + /** + * Test to see if the print areas can be retrieved/created in memory + */ + public void testSinglePrintArea() + { + HSSFWorkbook workbook = new HSSFWorkbook(); + HSSFSheet sheet = workbook.createSheet("Test Print Area"); + String sheetName = workbook.getSheetName(0); + + String reference = sheetName+"!$A$1:$B$1"; + workbook.setPrintArea(0, reference); + + String retrievedPrintArea = workbook.getPrintArea(0); + + assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); + assertEquals(reference, retrievedPrintArea); + + } + + /** + * Test to see if the print area can be retrieved from an excel created file + */ + public void testPrintAreaFileRead() + throws IOException + { + FileInputStream fis = null; + POIFSFileSystem fs = null; + HSSFWorkbook workbook = null; + + String filename = System.getProperty("HSSF.testdata.path"); + + filename = filename + "/SimpleWithPrintArea.xls"; + + try { + + fis = new FileInputStream(filename); + fs = new POIFSFileSystem(fis); + workbook = new HSSFWorkbook(fs); + + String sheetName = workbook.getSheetName(0); + String reference = sheetName+"!$A$1:$C$5"; + + assertEquals(reference, workbook.getPrintArea(0)); + + } finally { + fis.close(); + + } + + + + } + + + /** + * Test to see if the print area made it to the file + */ + public void testPrintAreaFile() + throws IOException + { + HSSFWorkbook workbook = new HSSFWorkbook(); + HSSFSheet sheet = workbook.createSheet("Test Print Area"); + String sheetName = workbook.getSheetName(0); + + + String reference = sheetName+"!$A$1:$B$1"; + workbook.setPrintArea(0, reference); + + File file = File.createTempFile("testPrintArea",".xls"); + + FileOutputStream fileOut = new FileOutputStream(file); + workbook.write(fileOut); + fileOut.close(); + + assertTrue("file exists",file.exists()); + + FileInputStream in = new FileInputStream(file); + workbook = new HSSFWorkbook(in); + + String retrievedPrintArea = workbook.getPrintArea(0); + assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); + assertEquals("References Match", reference, retrievedPrintArea); + + } + + /** + * Test to see if multiple print areas made it to the file + */ + public void testMultiplePrintAreaFile() + throws IOException + { + HSSFWorkbook workbook = new HSSFWorkbook(); + + HSSFSheet sheet = workbook.createSheet("Sheet 1"); + sheet = workbook.createSheet("Sheet 2"); + sheet = workbook.createSheet("Sheet 3"); + + String sheetName = workbook.getSheetName(0); + String reference = null; + + reference = sheetName+"!$A$1:$B$1"; + workbook.setPrintArea(0, reference); + + sheetName = workbook.getSheetName(1); + String reference2 = sheetName+"!$B$2:$D$5"; + workbook.setPrintArea(1, reference2); + + sheetName = workbook.getSheetName(2); + String reference3 = sheetName+"!$D$2:$F$5"; + workbook.setPrintArea(2, reference3); + + File file = File.createTempFile("testMultiPrintArea",".xls"); + + FileOutputStream fileOut = new FileOutputStream(file); + workbook.write(fileOut); + fileOut.close(); + + assertTrue("file exists",file.exists()); + + FileInputStream in = new FileInputStream(file); + workbook = new HSSFWorkbook(in); + + String retrievedPrintArea = workbook.getPrintArea(0); + assertNotNull("Print Area Not Found (Sheet 1)", retrievedPrintArea); + assertEquals(reference, retrievedPrintArea); + + String retrievedPrintArea2 = workbook.getPrintArea(1); + assertNotNull("Print Area Not Found (Sheet 2)", retrievedPrintArea2); + assertEquals(reference2, retrievedPrintArea2); + + String retrievedPrintArea3 = workbook.getPrintArea(2); + assertNotNull("Print Area Not Found (Sheet 3)", retrievedPrintArea3); + assertEquals(reference3, retrievedPrintArea3); + + + } } Index: src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java =================================================================== RCS file: /home/cvspublic/jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java,v retrieving revision 1.8 diff -u -r1.8 TestWorkbook.java --- src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java 7 Oct 2002 16:26:24 -0000 1.8 +++ src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java 25 Feb 2003 19:37:12 -0000 @@ -55,19 +55,21 @@ package org.apache.poi.hssf.usermodel; -import java.io.*; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Iterator; -import java.util.*; +import junit.framework.TestCase; -import junit.framework.*; - -import org.apache.poi.poifs.filesystem.POIFSFileSystem; -import org.apache.poi.hssf.util.*; import org.apache.poi.hssf.model.Workbook; import org.apache.poi.hssf.record.BackupRecord; import org.apache.poi.hssf.record.LabelSSTRecord; import org.apache.poi.hssf.record.Record; import org.apache.poi.hssf.record.aggregates.ValueRecordsAggregate; +import org.apache.poi.hssf.util.Region; +import org.apache.poi.poifs.filesystem.POIFSFileSystem; /** * Class to test Workbook functionality @@ -719,6 +721,35 @@ in.close(); file.deleteOnExit(); } + + /** + * Generate a file to visually/programmatically verify repeating rows and cols made it + */ + public void testRepeatingColsRows() throws IOException + { + HSSFWorkbook workbook = new HSSFWorkbook(); + HSSFSheet sheet = workbook.createSheet("Test Print Titles"); + String sheetName = workbook.getSheetName(0); + + HSSFRow row = sheet.createRow(0); + + HSSFCell cell = row.createCell((short)1); + cell.setCellValue("hi"); + + + workbook.setRepeatingRowsAndColumns(0, 0, 1, 0, 0); + + File file = File.createTempFile("testPrintTitles",".xls"); + + FileOutputStream fileOut = new FileOutputStream(file); + workbook.write(fileOut); + fileOut.close(); + + assertTrue("file exists",file.exists()); + + + } + public static void main(String [] ignored_args) {