FileDocCategorySizeDatePackage
Sheet.javaAPI DocApache Poi 3.0.1103363Thu May 31 18:44:06 BST 2007org.apache.poi.hssf.model

Sheet

public class Sheet extends Object implements Model
Low level model implementation of a Sheet (one workbook contains many sheets) This file contains the low level binary records starting at the sheets BOF and ending with the sheets EOF. Use HSSFSheet for a high level representation.

The structures of the highlevel API use references to this to perform most of their operations. Its probably unwise to use these low level structures directly unless you really know what you're doing. I recommend you read the Microsoft Excel 97 Developer's Kit (Microsoft Press) and the documentation at http://sc.openoffice.org/excelfileformat.pdf before even attempting to use this.

author
Andrew C. Oliver (acoliver at apache dot org)
author
Glen Stampoultzis (glens at apache.org)
author
Shawn Laubach (slaubach at apache dot org) Gridlines, Headers, Footers, PrintSetup, and Setting Default Column Styles
author
Jason Height (jheight at chariot dot net dot au) Clone support. DBCell & Index Record writing support
author
Brian Sanders (kestrel at burdell dot org) Active Cell support
author
Jean-Pierre Paris (jean-pierre.paris at m4x dot org) (Just a little)
see
org.apache.poi.hssf.model.Workbook
see
org.apache.poi.hssf.usermodel.HSSFSheet
version
1.0-pre

Fields Summary
public static final short
LeftMargin
public static final short
RightMargin
public static final short
TopMargin
public static final short
BottomMargin
private static POILogger
log
protected ArrayList
records
int
preoffset
int
loc
protected int
dimsloc
protected DimensionsRecord
dims
protected DefaultColWidthRecord
defaultcolwidth
protected DefaultRowHeightRecord
defaultrowheight
protected GridsetRecord
gridset
protected PrintSetupRecord
printSetup
protected HeaderRecord
header
protected FooterRecord
footer
protected PrintGridlinesRecord
printGridlines
protected WindowTwoRecord
windowTwo
protected MergeCellsRecord
merged
protected Margin[]
margins
protected List
mergedRecords
protected int
numMergedRegions
protected SelectionRecord
selection
protected ColumnInfoRecordsAggregate
columns
protected ValueRecordsAggregate
cells
protected RowRecordsAggregate
rows
private Iterator
valueRecIterator
private Iterator
rowRecIterator
protected int
eofLoc
protected ProtectRecord
protect
protected PageBreakRecord
rowBreaks
protected PageBreakRecord
colBreaks
public static final byte
PANE_LOWER_RIGHT
public static final byte
PANE_UPPER_RIGHT
public static final byte
PANE_LOWER_LEFT
public static final byte
PANE_UPPER_LEFT
Constructors Summary
public Sheet()
Creates new Sheet with no intialization --useless at this point

see
#createSheet(List,int,int)


                     
     
    
    
Methods Summary
public intaddMergedRegion(int rowFrom, short colFrom, int rowTo, short colTo)

        if (merged == null || merged.getNumAreas() == 1027)
        {
            merged = ( MergeCellsRecord ) createMergedCells();
            mergedRecords.add(merged);            
            records.add(records.size() - 1, merged);
        }
        merged.addArea(rowFrom, colFrom, rowTo, colTo);
        return numMergedRegions++; 
    
public voidaddRow(org.apache.poi.hssf.record.RowRecord row)
Adds a row record to the sheet

This method is "loc" sensitive. Meaning you need to set LOC to where you want it to start searching. If you don't know do this: setLoc(getDimsLoc). When adding several rows you can just start at the last one by leaving loc at what this sets it to.

param
row the row record to be added
see
#setLoc(int)

        checkRows();
        if (log.check( POILogger.DEBUG ))
            log.log(POILogger.DEBUG, "addRow ");
        DimensionsRecord d = ( DimensionsRecord ) records.get(getDimsLoc());

        if (row.getRowNumber() >= d.getLastRow())
        {
            d.setLastRow(row.getRowNumber() + 1);
        }
        if (row.getRowNumber() < d.getFirstRow())
        {
            d.setFirstRow(row.getRowNumber());
        }
        //IndexRecord index = null;
         //If the row exists remove it, so that any cells attached to the row are removed
         RowRecord existingRow = rows.getRow(row.getRowNumber());
         if (existingRow != null)
           rows.removeRow(existingRow);

        rows.insertRow(row);

        /*
         * for (int k = loc; k < records.size(); k++)
         * {
         *   Record rec = ( Record ) records.get(k);
         *
         *   if (rec.getSid() == IndexRecord.sid)
         *   {
         *       index = ( IndexRecord ) rec;
         *   }
         *   if (rec.getSid() == RowRecord.sid)
         *   {
         *       RowRecord rowrec = ( RowRecord ) rec;
         *
         *       if (rowrec.getRowNumber() > row.getRowNumber())
         *       {
         *           records.add(k, row);
         *           loc = k;
         *           break;
         *       }
         *   }
         *   if (rec.getSid() == WindowTwoRecord.sid)
         *   {
         *       records.add(k, row);
         *       loc = k;
         *       break;
         *   }
         * }
         * if (index != null)
         * {
         *   if (index.getLastRowAdd1() <= row.getRowNumber())
         *   {
         *       index.setLastRowAdd1(row.getRowNumber() + 1);
         *   }
         * }
         */
        if (log.check( POILogger.DEBUG ))
            log.log(POILogger.DEBUG, "exit addRow");
    
public voidaddValueRecord(int row, org.apache.poi.hssf.record.CellValueRecordInterface col)
Adds a value record to the sheet's contained binary records (i.e. LabelSSTRecord or NumberRecord).

This method is "loc" sensitive. Meaning you need to set LOC to where you want it to start searching. If you don't know do this: setLoc(getDimsLoc). When adding several rows you can just start at the last one by leaving loc at what this sets it to.

param
row the row to add the cell value to
param
col the cell value record itself.

        checkCells();
        if(log.check(POILogger.DEBUG))
        {
          log.logFormatted(POILogger.DEBUG, "add value record  row,loc %,%", new int[]
          {
              row, loc
          });
        }
        DimensionsRecord d = ( DimensionsRecord ) records.get(getDimsLoc());

        if (col.getColumn() > d.getLastCol())
        {
            d.setLastCol(( short ) (col.getColumn() + 1));
        }
        if (col.getColumn() < d.getFirstCol())
        {
            d.setFirstCol(col.getColumn());
        }
        cells.insertCell(col);

        /*
         * for (int k = loc; k < records.size(); k++)
         * {
         *   Record rec = ( Record ) records.get(k);
         *
         *   if (rec.getSid() == RowRecord.sid)
         *   {
         *       RowRecord rowrec = ( RowRecord ) rec;
         *
         *       if (rowrec.getRowNumber() == col.getRow())
         *       {
         *           records.add(k + 1, col);
         *           loc = k;
         *           if (rowrec.getLastCol() <= col.getColumn())
         *           {
         *               rowrec.setLastCol((( short ) (col.getColumn() + 1)));
         *           }
         *           break;
         *       }
         *   }
         * }
         */
    
public intaggregateDrawingRecords(org.apache.poi.hssf.model.DrawingManager2 drawingManager)

        int loc = findFirstRecordLocBySid(DrawingRecord.sid);
        boolean noDrawingRecordsFound = loc == -1;
        if (noDrawingRecordsFound)
        {
            EscherAggregate aggregate = new EscherAggregate( drawingManager );
            loc = findFirstRecordLocBySid(EscherAggregate.sid);
            if (loc == -1)
            {
                loc = findFirstRecordLocBySid( WindowTwoRecord.sid );
            }
            else
            {
                getRecords().remove(loc);
            }
            getRecords().add( loc, aggregate );
            return loc;
        }
        else
        {
            List records = getRecords();
            EscherAggregate r = EscherAggregate.createAggregate( records, loc, drawingManager );
            int startloc = loc;
            while ( loc + 1 < records.size()
                    && records.get( loc ) instanceof DrawingRecord
                    && records.get( loc + 1 ) instanceof ObjRecord )
            {
                loc += 2;
            }
            int endloc = loc-1;
            for(int i = 0; i < (endloc - startloc + 1); i++)
                records.remove(startloc);
            records.add(startloc, r);

            return startloc;
        }
    
private voidcheckCells()

        if (cells == null)
        {
            cells = new ValueRecordsAggregate();
            records.add(getDimsLoc() + 1, cells);
        }
    
public voidcheckDimsLoc(org.apache.poi.hssf.record.Record rec, int recloc)
in the event the record is a dimensions record, resets both the loc index and dimsloc index

        if (rec.getSid() == DimensionsRecord.sid)
        {
            loc     = recloc;
            dimsloc = recloc;
        }
    
private voidcheckRows()

        if (rows == null)
        {
            rows = new RowRecordsAggregate();
            records.add(getDimsLoc() + 1, rows);
        }
    
public org.apache.poi.hssf.model.SheetcloneSheet()
Clones the low level records of this sheet and returns the new sheet instance. This method is implemented by adding methods for deep cloning to all records that can be added to a sheet. The Record object does not implement cloneable. When adding a new record, implement a public clone method if and only if the record belongs to a sheet.

      ArrayList clonedRecords = new ArrayList(this.records.size());
      for (int i=0; i<this.records.size();i++) {
        Record rec = (Record)((Record)this.records.get(i)).clone();
        //Need to pull out the Row record and the Value records from their
        //Aggregates.
        //This is probably the best way to do it since we probably dont want the createSheet
        //To cater for these artificial Record types
        if (rec instanceof RowRecordsAggregate) {
          RowRecordsAggregate rrAgg = (RowRecordsAggregate)rec;
          for (Iterator rowIter = rrAgg.getIterator();rowIter.hasNext();) {
            Record rowRec = (Record)rowIter.next();
            clonedRecords.add(rowRec);
          }
        } else if (rec instanceof ValueRecordsAggregate) {
          ValueRecordsAggregate vrAgg = (ValueRecordsAggregate)rec;
          for (Iterator cellIter = vrAgg.getIterator();cellIter.hasNext();) {
            Record valRec = (Record)cellIter.next();
            
            if (valRec instanceof FormulaRecordAggregate) {
                FormulaRecordAggregate fmAgg = (FormulaRecordAggregate)valRec;
                Record fmAggRec = fmAgg.getFormulaRecord();
                if (fmAggRec != null)
                  clonedRecords.add(fmAggRec);
                fmAggRec =   fmAgg.getStringRecord();
                if (fmAggRec != null)
                  clonedRecords.add(fmAggRec);
              } else {
                clonedRecords.add(valRec);
              }
          }
        } else if (rec instanceof FormulaRecordAggregate) {  //Is this required now??
          FormulaRecordAggregate fmAgg = (FormulaRecordAggregate)rec;
          Record fmAggRec = fmAgg.getFormulaRecord();
          if (fmAggRec != null)
            clonedRecords.add(fmAggRec);
          fmAggRec =   fmAgg.getStringRecord();
          if (fmAggRec != null)
            clonedRecords.add(fmAggRec);
        } else {
          clonedRecords.add(rec);
        }
      }
      return createSheet(clonedRecords, 0, 0);
    
protected org.apache.poi.hssf.record.RecordcreateBOF()
creates the BOF record

see
org.apache.poi.hssf.record.BOFRecord
see
org.apache.poi.hssf.record.Record
return
record containing a BOFRecord

        BOFRecord retval = new BOFRecord();

        retval.setVersion(( short ) 0x600);
        retval.setType(( short ) 0x010);

        // retval.setBuild((short)0x10d3);
        retval.setBuild(( short ) 0x0dbb);
        retval.setBuildYear(( short ) 1996);
        retval.setHistoryBitMask(0xc1);
        retval.setRequiredVersion(0x6);
        return retval;
    
public org.apache.poi.hssf.record.BlankRecordcreateBlank(int row, short col)
create a BLANK record (does not add it to the records contained in this sheet)

param
row - the row the BlankRecord is a member of
param
col - the column the BlankRecord is a member of

        //log.logFormatted(POILogger.DEBUG, "create blank row,col %,%", new short[]
        log.logFormatted(POILogger.DEBUG, "create blank row,col %,%", new int[]
        {
            row, col
        });
        BlankRecord rec = new BlankRecord();

        //rec.setRow(( short ) row);
        rec.setRow(row);
        rec.setColumn(col);
        rec.setXFIndex(( short ) 0x0f);
        return rec;
    
protected org.apache.poi.hssf.record.RecordcreateCalcCount()
creates the CalcCount record and sets it to 0x64 (default number of iterations)

see
org.apache.poi.hssf.record.CalcCountRecord
see
org.apache.poi.hssf.record.Record
return
record containing a CalcCountRecord

        CalcCountRecord retval = new CalcCountRecord();

        retval.setIterations(( short ) 0x64);   // default 64 iterations
        return retval;
    
protected org.apache.poi.hssf.record.RecordcreateCalcMode()
creates the CalcMode record and sets it to 1 (automatic formula caculation)

see
org.apache.poi.hssf.record.CalcModeRecord
see
org.apache.poi.hssf.record.Record
return
record containing a CalcModeRecord

        CalcModeRecord retval = new CalcModeRecord();

        retval.setCalcMode(( short ) 1);
        return retval;
    
protected org.apache.poi.hssf.record.RecordcreateColInfo()
creates the ColumnInfo Record and sets it to a default column/width

see
org.apache.poi.hssf.record.ColumnInfoRecord
return
record containing a ColumnInfoRecord

        return ColumnInfoRecordsAggregate.createColInfo();
    
protected org.apache.poi.hssf.record.RecordcreateDefaultColWidth()
creates the DefaultColWidth Record and sets it to 8

see
org.apache.poi.hssf.record.DefaultColWidthRecord
see
org.apache.poi.hssf.record.Record
return
record containing a DefaultColWidthRecord

        DefaultColWidthRecord retval = new DefaultColWidthRecord();

        retval.setColWidth(( short ) 8);
        return retval;
    
protected org.apache.poi.hssf.record.RecordcreateDefaultRowHeight()
creates the DefaultRowHeight Record and sets its options to 0 and rowheight to 0xff

see
org.apache.poi.hssf.record.DefaultRowHeightRecord
see
org.apache.poi.hssf.record.Record
return
record containing a DefaultRowHeightRecord

        DefaultRowHeightRecord retval = new DefaultRowHeightRecord();

        retval.setOptionFlags(( short ) 0);
        retval.setRowHeight(( short ) 0xff);
        return retval;
    
protected org.apache.poi.hssf.record.RecordcreateDelta()
creates the Delta record and sets it to 0.0010 (default accuracy)

see
org.apache.poi.hssf.record.DeltaRecord
see
org.apache.poi.hssf.record.Record
return
record containing a DeltaRecord

        DeltaRecord retval = new DeltaRecord();

        retval.setMaxChange(0.0010);
        return retval;
    
protected org.apache.poi.hssf.record.RecordcreateDimensions()
creates the Dimensions Record and sets it to bogus values (you should set this yourself or let the high level API do it for you)

see
org.apache.poi.hssf.record.DimensionsRecord
see
org.apache.poi.hssf.record.Record
return
record containing a DimensionsRecord

        DimensionsRecord retval = new DimensionsRecord();

        retval.setFirstCol(( short ) 0);
        retval.setLastRow(1);             // one more than it is
        retval.setFirstRow(0);
        retval.setLastCol(( short ) 1);   // one more than it is
        return retval;
    
protected org.apache.poi.hssf.record.RecordcreateEOF()
creates the EOF record

see
org.apache.poi.hssf.record.EOFRecord
see
org.apache.poi.hssf.record.Record
return
record containing a EOFRecord

        return new EOFRecord();
    
protected org.apache.poi.hssf.record.RecordcreateFooter()
creates the Footer Record and sets it to nothing/0 length

see
org.apache.poi.hssf.record.FooterRecord
see
org.apache.poi.hssf.record.Record
return
record containing a FooterRecord

        FooterRecord retval = new FooterRecord();

        retval.setFooterLength(( byte ) 0);
        retval.setFooter(null);
        return retval;
    
public org.apache.poi.hssf.record.FormulaRecordcreateFormula(int row, short col, java.lang.String formula)
Attempts to parse the formula into PTGs and create a formula record DOES NOT WORK YET

param
row - the row for the formula record
param
col - the column of the formula record
param
formula - a String representing the formula. To be parsed to PTGs
return
bogus/useless formula record

        log.logFormatted(POILogger.DEBUG, "create formula row,col,formula %,%,%",
                         //new short[]
                         new int[]
        {
            row, col
        }, formula);
        FormulaRecord rec = new FormulaRecord();

        rec.setRow(row);
        rec.setColumn(col);
        rec.setOptions(( short ) 2);
        rec.setValue(0);
        rec.setXFIndex(( short ) 0x0f);
        FormulaParser fp = new FormulaParser(formula,null); //fix - do we need this method?
        fp.parse();
        Ptg[] ptg  = fp.getRPNPtg();
        int   size = 0;

        for (int k = 0; k < ptg.length; k++)
        {
            size += ptg[ k ].getSize();
            rec.pushExpressionToken(ptg[ k ]);
        }
        rec.setExpressionLength(( short ) size);
        return rec;
    
public voidcreateFreezePane(int colSplit, int rowSplit, int topRow, int leftmostColumn)
Creates a split (freezepane). Any existing freezepane or split pane is overwritten.

param
colSplit Horizonatal position of split.
param
rowSplit Vertical position of split.
param
topRow Top row visible in bottom pane
param
leftmostColumn Left column visible in right pane.

    	int paneLoc = findFirstRecordLocBySid(PaneRecord.sid);
    	if (paneLoc != -1)
    		records.remove(paneLoc);
    	
        int loc = findFirstRecordLocBySid(WindowTwoRecord.sid);
        PaneRecord pane = new PaneRecord();
        pane.setX((short)colSplit);
        pane.setY((short)rowSplit);
        pane.setTopRow((short) topRow);
        pane.setLeftColumn((short) leftmostColumn);
        if (rowSplit == 0)
        {
            pane.setTopRow((short)0);
            pane.setActivePane((short)1);
        }
        else if (colSplit == 0)
        {
            pane.setLeftColumn((short)64);
            pane.setActivePane((short)2);
        }
        else
        {
            pane.setActivePane((short)0);
        }
        records.add(loc+1, pane);

        windowTwo.setFreezePanes(true);
        windowTwo.setFreezePanesNoSplit(true);

        SelectionRecord sel = (SelectionRecord) findFirstRecordBySid(SelectionRecord.sid);
        sel.setPane((byte)pane.getActivePane());

    
protected org.apache.poi.hssf.record.RecordcreateGridset()
creates the Gridset record and sets it to true (user has mucked with the gridlines)

see
org.apache.poi.hssf.record.GridsetRecord
see
org.apache.poi.hssf.record.Record
return
record containing a GridsetRecord

        GridsetRecord retval = new GridsetRecord();

        retval.setGridset(true);
        return retval;
    
protected org.apache.poi.hssf.record.RecordcreateGuts()
creates the Guts record and sets leftrow/topcol guttter and rowlevelmax/collevelmax to 0

see
org.apache.poi.hssf.record.GutsRecord
see
org.apache.poi.hssf.record.Record
return
record containing a GutsRecordRecord

        GutsRecord retval = new GutsRecord();

        retval.setLeftRowGutter(( short ) 0);
        retval.setTopColGutter(( short ) 0);
        retval.setRowLevelMax(( short ) 0);
        retval.setColLevelMax(( short ) 0);
        return retval;
    
protected org.apache.poi.hssf.record.RecordcreateHCenter()
creates the HCenter Record and sets it to false (don't horizontally center)

see
org.apache.poi.hssf.record.HCenterRecord
see
org.apache.poi.hssf.record.Record
return
record containing a HCenterRecord

        HCenterRecord retval = new HCenterRecord();

        retval.setHCenter(false);
        return retval;
    
protected org.apache.poi.hssf.record.RecordcreateHeader()
creates the Header Record and sets it to nothing/0 length

see
org.apache.poi.hssf.record.HeaderRecord
see
org.apache.poi.hssf.record.Record
return
record containing a HeaderRecord

        HeaderRecord retval = new HeaderRecord();

        retval.setHeaderLength(( byte ) 0);
        retval.setHeader(null);
        return retval;
    
protected org.apache.poi.hssf.record.RecordcreateIndex()
creates the Index record - not currently used

see
org.apache.poi.hssf.record.IndexRecord
see
org.apache.poi.hssf.record.Record
return
record containing a IndexRecord

        IndexRecord retval = new IndexRecord();

        retval.setFirstRow(0);   // must be set explicitly
        retval.setLastRowAdd1(0);
        return retval;
    
protected org.apache.poi.hssf.record.RecordcreateIteration()
creates the Iteration record and sets it to false (don't iteratively calculate formulas)

see
org.apache.poi.hssf.record.IterationRecord
see
org.apache.poi.hssf.record.Record
return
record containing a IterationRecord

        IterationRecord retval = new IterationRecord();

        retval.setIteration(false);
        return retval;
    
public org.apache.poi.hssf.record.LabelSSTRecordcreateLabelSST(int row, short col, int index)
Create a LABELSST Record (does not add it to the records contained in this sheet)

param
row the row the LabelSST is a member of
param
col the column the LabelSST defines
param
index the index of the string within the SST (use workbook addSSTString method)
return
LabelSSTRecord newly created containing your SST Index, row,col.
see
org.apache.poi.hssf.record.SSTRecord

        log.logFormatted(POILogger.DEBUG, "create labelsst row,col,index %,%,%",
                         new int[]
        {
            row, col, index
        });
        LabelSSTRecord rec = new LabelSSTRecord();

        rec.setRow(row);
        rec.setColumn(col);
        rec.setSSTIndex(index);
        rec.setXFIndex(( short ) 0x0f);
        return rec;
    
protected org.apache.poi.hssf.record.RecordcreateMergedCells()

        MergeCellsRecord retval = new MergeCellsRecord();
        retval.setNumAreas(( short ) 0);
        return retval;
    
public org.apache.poi.hssf.record.NumberRecordcreateNumber(int row, short col, double value)
Create a NUMBER Record (does not add it to the records contained in this sheet)

param
row the row the NumberRecord is a member of
param
col the column the NumberRecord defines
param
value for the number record
return
NumberRecord for that row, col containing that value as added to the sheet

        log.logFormatted(POILogger.DEBUG, "create number row,col,value %,%,%",
                         new double[]
        {
            row, col, value
        });
        NumberRecord rec = new NumberRecord();

        //rec.setRow(( short ) row);
        rec.setRow(row);
        rec.setColumn(col);
        rec.setValue(value);
        rec.setXFIndex(( short ) 0x0f);
        return rec;
    
protected org.apache.poi.hssf.record.RecordcreatePrintGridlines()
creates the PrintGridlines record and sets it to false (that makes for ugly sheets). As far as I can tell this does the same thing as the GridsetRecord

see
org.apache.poi.hssf.record.PrintGridlinesRecord
see
org.apache.poi.hssf.record.Record
return
record containing a PrintGridlinesRecord

        PrintGridlinesRecord retval = new PrintGridlinesRecord();

        retval.setPrintGridlines(false);
        return retval;
    
protected org.apache.poi.hssf.record.RecordcreatePrintHeaders()
creates the PrintHeaders record and sets it to false (we don't create headers yet so why print them)

see
org.apache.poi.hssf.record.PrintHeadersRecord
see
org.apache.poi.hssf.record.Record
return
record containing a PrintHeadersRecord

        PrintHeadersRecord retval = new PrintHeadersRecord();

        retval.setPrintHeaders(false);
        return retval;
    
protected org.apache.poi.hssf.record.RecordcreatePrintSetup()
creates the PrintSetup Record and sets it to defaults and marks it invalid

see
org.apache.poi.hssf.record.PrintSetupRecord
see
org.apache.poi.hssf.record.Record
return
record containing a PrintSetupRecord

        PrintSetupRecord retval = new PrintSetupRecord();

        retval.setPaperSize(( short ) 1);
        retval.setScale(( short ) 100);
        retval.setPageStart(( short ) 1);
        retval.setFitWidth(( short ) 1);
        retval.setFitHeight(( short ) 1);
        retval.setOptions(( short ) 2);
        retval.setHResolution(( short ) 300);
        retval.setVResolution(( short ) 300);
        retval.setHeaderMargin( 0.5);
        retval.setFooterMargin( 0.5);
        retval.setCopies(( short ) 0);
        return retval;
    
protected org.apache.poi.hssf.record.RecordcreateProtect()
creates a Protect record with protect set to false.

see
org.apache.poi.hssf.record.ProtectRecord
see
org.apache.poi.hssf.record.Record
return
a ProtectRecord

        if (log.check( POILogger.DEBUG ))
            log.log(POILogger.DEBUG, "create protect record with protection disabled");
        ProtectRecord retval = new ProtectRecord();

        retval.setProtect(false);
        // by default even when we support encryption we won't
        return retval;
    
protected org.apache.poi.hssf.record.RecordcreateRefMode()
creates the RefMode record and sets it to A1 Mode (default reference mode)

see
org.apache.poi.hssf.record.RefModeRecord
see
org.apache.poi.hssf.record.Record
return
record containing a RefModeRecord

        RefModeRecord retval = new RefModeRecord();

        retval.setMode(RefModeRecord.USE_A1_MODE);
        return retval;
    
public org.apache.poi.hssf.record.RowRecordcreateRow(int row)
Create a row record. (does not add it to the records contained in this sheet)

param
row number
return
RowRecord created for the passed in row number
see
org.apache.poi.hssf.record.RowRecord

        return RowRecordsAggregate.createRow( row );
    
protected org.apache.poi.hssf.record.RecordcreateSaveRecalc()
creates the SaveRecalc record and sets it to true (recalculate before saving)

see
org.apache.poi.hssf.record.SaveRecalcRecord
see
org.apache.poi.hssf.record.Record
return
record containing a SaveRecalcRecord

        SaveRecalcRecord retval = new SaveRecalcRecord();

        retval.setRecalc(true);
        return retval;
    
protected org.apache.poi.hssf.record.RecordcreateSelection()
Creates the Selection record and sets it to nothing selected

see
org.apache.poi.hssf.record.SelectionRecord
see
org.apache.poi.hssf.record.Record
return
record containing a SelectionRecord

        SelectionRecord retval = new SelectionRecord();

        retval.setPane(( byte ) 0x3);
        retval.setActiveCellCol(( short ) 0x0);
        retval.setActiveCellRow(( short ) 0x0);
        retval.setNumRefs(( short ) 0x0);
        return retval;
    
public static org.apache.poi.hssf.model.SheetcreateSheet(java.util.List recs, int sheetnum, int offset)
read support (offset used as starting point for search) for low level API. Pass in an array of Record objects, the sheet number (0 based) and a record offset (should be the location of the sheets BOF record). A Sheet object is constructed and passed back with all of its initialization set to the passed in records and references to those records held. This function is normally called via Workbook.

param
recs array containing those records in the sheet in sequence (normally obtained from RecordFactory)
param
sheetnum integer specifying the sheet's number (0,1 or 2 in this release)
param
offset of the sheet's BOF record
return
Sheet object with all values set to those read from the file
see
org.apache.poi.hssf.model.Workbook
see
org.apache.poi.hssf.record.Record

        if (log.check( POILogger.DEBUG ))
            log.logFormatted(POILogger.DEBUG,
                    "Sheet createSheet (existing file) with %",
                    new Integer(recs.size()));
        Sheet     retval             = new Sheet();
        ArrayList records            = new ArrayList(recs.size() / 5);
        boolean   isfirstcell        = true;
        boolean   isfirstrow         = true;
        int       bofEofNestingLevel = 0;

        for (int k = offset; k < recs.size(); k++)
        {
            Record rec = ( Record ) recs.get(k);

            if (rec.getSid() == BOFRecord.sid)
            {
                bofEofNestingLevel++;
                if (log.check( POILogger.DEBUG ))
                    log.log(POILogger.DEBUG, "Hit BOF record. Nesting increased to " + bofEofNestingLevel);
            }
            else if (rec.getSid() == EOFRecord.sid)
            {
                --bofEofNestingLevel;
                if (log.check( POILogger.DEBUG ))
                    log.log(POILogger.DEBUG, "Hit EOF record. Nesting decreased to " + bofEofNestingLevel);
                if (bofEofNestingLevel == 0) {
                    records.add(rec);
                    retval.eofLoc = k;
                    break;
                }
            }
            else if (rec.getSid() == DimensionsRecord.sid)
            {
                // Make a columns aggregate if one hasn't ready been created.
                if (retval.columns == null)
                {
                    retval.columns = new ColumnInfoRecordsAggregate();
                    records.add(retval.columns);
                }

                retval.dims    = ( DimensionsRecord ) rec;
                retval.dimsloc = records.size();
            }
            else if (rec.getSid() == MergeCellsRecord.sid)
            {
                retval.mergedRecords.add(rec);
                retval.merged = ( MergeCellsRecord ) rec;
                retval.numMergedRegions += retval.merged.getNumAreas();
            }
            else if (rec.getSid() == ColumnInfoRecord.sid)
            {
                ColumnInfoRecord col = (ColumnInfoRecord)rec;
                if (retval.columns != null)
                {
                    rec = null; //only add the aggregate once
                }
                else
                {
                    rec = retval.columns = new ColumnInfoRecordsAggregate();
                }
                retval.columns.insertColumn(col);
            }
            else if (rec.getSid() == DefaultColWidthRecord.sid)
            {
                retval.defaultcolwidth = ( DefaultColWidthRecord ) rec;
            }
            else if (rec.getSid() == DefaultRowHeightRecord.sid)
            {
                retval.defaultrowheight = ( DefaultRowHeightRecord ) rec;
            }
            else if ( rec.isValue() && bofEofNestingLevel == 1 )
            {
                if ( isfirstcell )
                {
                    retval.cells = new ValueRecordsAggregate();
                    rec = retval.cells;
                    retval.cells.construct( k, recs );
                    isfirstcell = false;
                }
                else
                {
                    rec = null;
                }
            }
            else if ( rec.getSid() == StringRecord.sid )
            {
                rec = null;
            }
            else if ( rec.getSid() == RowRecord.sid )
            {
                RowRecord row = (RowRecord)rec;
                if (!isfirstrow) rec = null; //only add the aggregate once

                if ( isfirstrow )
                {
                    retval.rows = new RowRecordsAggregate();
                    rec = retval.rows;                    
                    isfirstrow = false;
                }
                retval.rows.insertRow(row);
            }
            else if ( rec.getSid() == PrintGridlinesRecord.sid )
            {
                retval.printGridlines = (PrintGridlinesRecord) rec;
            }
            else if ( rec.getSid() == GridsetRecord.sid )
            {
                retval.gridset = (GridsetRecord) rec;
            }            
            else if ( rec.getSid() == HeaderRecord.sid && bofEofNestingLevel == 1)
            {
                retval.header = (HeaderRecord) rec;
            }
            else if ( rec.getSid() == FooterRecord.sid && bofEofNestingLevel == 1)
            {
                retval.footer = (FooterRecord) rec;
            }
            else if ( rec.getSid() == PrintSetupRecord.sid && bofEofNestingLevel == 1)
            {
                retval.printSetup = (PrintSetupRecord) rec;
            }
            else if ( rec.getSid() == LeftMarginRecord.sid)
            {
                retval.getMargins()[LeftMargin] = (LeftMarginRecord) rec;
            }
            else if ( rec.getSid() == RightMarginRecord.sid)
            {
                retval.getMargins()[RightMargin] = (RightMarginRecord) rec;
            }
            else if ( rec.getSid() == TopMarginRecord.sid)
            {
                retval.getMargins()[TopMargin] = (TopMarginRecord) rec;
            }
            else if ( rec.getSid() == BottomMarginRecord.sid)
            {
                retval.getMargins()[BottomMargin] = (BottomMarginRecord) rec;
            }
            else if ( rec.getSid() == SelectionRecord.sid )
            {
                retval.selection = (SelectionRecord) rec;
            }
            else if ( rec.getSid() == WindowTwoRecord.sid )
            {
                retval.windowTwo = (WindowTwoRecord) rec;
            }
            else if ( rec.getSid() == DBCellRecord.sid )
            {
                rec = null;
            }
            else if ( rec.getSid() == IndexRecord.sid )
            {
                rec = null;
            }
            
			else if ( rec.getSid() == ProtectRecord.sid )
			{
				retval.protect = (ProtectRecord) rec;
			} 
			else if (rec.getSid() == PageBreakRecord.HORIZONTAL_SID) 
			{	
				retval.rowBreaks = (PageBreakRecord)rec;				
			}
			else if (rec.getSid() == PageBreakRecord.VERTICAL_SID) 
			{	
				retval.colBreaks = (PageBreakRecord)rec;				
			}
            
            if (rec != null)
            {
                records.add(rec);
            }
        }
        retval.records = records;
//        if (retval.rows == null)
//        {
//            retval.rows = new RowRecordsAggregate();
//        }
        retval.checkCells();
        retval.checkRows();
//        if (retval.cells == null)
//        {
//            retval.cells = new ValueRecordsAggregate();
//        }
        if (log.check( POILogger.DEBUG ))
            log.log(POILogger.DEBUG, "sheet createSheet (existing file) exited");
        return retval;
    
public static org.apache.poi.hssf.model.SheetcreateSheet(java.util.List records, int sheetnum)
read support (offset = 0) Same as createSheet(Record[] recs, int, int) only the record offset is assumed to be 0.

param
records array containing those records in the sheet in sequence (normally obtained from RecordFactory)
param
sheetnum integer specifying the sheet's number (0,1 or 2 in this release)
return
Sheet object

        if (log.check( POILogger.DEBUG ))
            log.log(POILogger.DEBUG,
                    "Sheet createSheet (exisiting file) assumed offset 0");
        return createSheet(records, sheetnum, 0);
    
public static org.apache.poi.hssf.model.SheetcreateSheet()
Creates a sheet with all the usual records minus values and the "index" record (not required). Sets the location pointer to where the first value records should go. Use this to create a sheet from "scratch".

return
Sheet object with all values set to defaults

        if (log.check( POILogger.DEBUG ))
            log.log(POILogger.DEBUG, "Sheet createsheet from scratch called");
        Sheet     retval  = new Sheet();
        ArrayList records = new ArrayList(30);

        records.add(retval.createBOF());

        // records.add(retval.createIndex());
        records.add(retval.createCalcMode());
        records.add(retval.createCalcCount() );
        records.add( retval.createRefMode() );
        records.add( retval.createIteration() );
        records.add( retval.createDelta() );
        records.add( retval.createSaveRecalc() );
        records.add( retval.createPrintHeaders() );
        retval.printGridlines = (PrintGridlinesRecord) retval.createPrintGridlines();
        records.add( retval.printGridlines );
        retval.gridset = (GridsetRecord) retval.createGridset();
        records.add( retval.gridset );
        records.add( retval.createGuts() );
        retval.defaultrowheight =
                (DefaultRowHeightRecord) retval.createDefaultRowHeight();
        records.add( retval.defaultrowheight );
        records.add( retval.createWSBool() );

        retval.rowBreaks = new PageBreakRecord(PageBreakRecord.HORIZONTAL_SID);
        records.add(retval.rowBreaks);
        retval.colBreaks = new PageBreakRecord(PageBreakRecord.VERTICAL_SID);
        records.add(retval.colBreaks);
        
        retval.header = (HeaderRecord) retval.createHeader();
        records.add( retval.header );        
        retval.footer = (FooterRecord) retval.createFooter();
        records.add( retval.footer );
        records.add( retval.createHCenter() );
        records.add( retval.createVCenter() );
        retval.printSetup = (PrintSetupRecord) retval.createPrintSetup();
        records.add( retval.printSetup );
        retval.defaultcolwidth =
                (DefaultColWidthRecord) retval.createDefaultColWidth();
        records.add( retval.defaultcolwidth);
        ColumnInfoRecordsAggregate columns = new ColumnInfoRecordsAggregate();
        records.add( columns );
        retval.columns = columns;
        retval.dims    = ( DimensionsRecord ) retval.createDimensions();
        records.add(retval.dims);
        retval.dimsloc = records.size()-1;
        records.add(retval.windowTwo = retval.createWindowTwo());
        retval.setLoc(records.size() - 1);
        retval.selection = 
                (SelectionRecord) retval.createSelection();
        records.add(retval.selection);
		retval.protect = (ProtectRecord) retval.createProtect();
		records.add(retval.protect);
        records.add(retval.createEOF());


        retval.records = records;
        if (log.check( POILogger.DEBUG ))
            log.log(POILogger.DEBUG, "Sheet createsheet from scratch exit");
        return retval;
    
public voidcreateSplitPane(int xSplitPos, int ySplitPos, int topRow, int leftmostColumn, int activePane)
Creates a split pane. Any existing freezepane or split pane is overwritten.

param
xSplitPos Horizonatal position of split (in 1/20th of a point).
param
ySplitPos Vertical position of split (in 1/20th of a point).
param
topRow Top row visible in bottom pane
param
leftmostColumn Left column visible in right pane.
param
activePane Active pane. One of: PANE_LOWER_RIGHT, PANE_UPPER_RIGHT, PANE_LOWER_LEFT, PANE_UPPER_LEFT
see
#PANE_LOWER_LEFT
see
#PANE_LOWER_RIGHT
see
#PANE_UPPER_LEFT
see
#PANE_UPPER_RIGHT

    	int paneLoc = findFirstRecordLocBySid(PaneRecord.sid);
    	if (paneLoc != -1)
    		records.remove(paneLoc);
    	
        int loc = findFirstRecordLocBySid(WindowTwoRecord.sid);
        PaneRecord r = new PaneRecord();
        r.setX((short)xSplitPos);
        r.setY((short)ySplitPos);
        r.setTopRow((short) topRow);
        r.setLeftColumn((short) leftmostColumn);
        r.setActivePane((short) activePane);
        records.add(loc+1, r);

        windowTwo.setFreezePanes(false);
        windowTwo.setFreezePanesNoSplit(false);

        SelectionRecord sel = (SelectionRecord) findFirstRecordBySid(SelectionRecord.sid);
        sel.setPane(PANE_LOWER_RIGHT);

    
protected org.apache.poi.hssf.record.RecordcreateVCenter()
creates the VCenter Record and sets it to false (don't horizontally center)

see
org.apache.poi.hssf.record.VCenterRecord
see
org.apache.poi.hssf.record.Record
return
record containing a VCenterRecord

        VCenterRecord retval = new VCenterRecord();

        retval.setVCenter(false);
        return retval;
    
protected org.apache.poi.hssf.record.RecordcreateWSBool()
creates the WSBoolRecord and sets its values to defaults

see
org.apache.poi.hssf.record.WSBoolRecord
see
org.apache.poi.hssf.record.Record
return
record containing a WSBoolRecord

        WSBoolRecord retval = new WSBoolRecord();

        retval.setWSBool1(( byte ) 0x4);
        retval.setWSBool2(( byte ) 0xffffffc1);
        return retval;
    
protected org.apache.poi.hssf.record.WindowTwoRecordcreateWindowTwo()
creates the WindowTwo Record and sets it to:

options = 0x6b6

toprow = 0

leftcol = 0

headercolor = 0x40

pagebreakzoom = 0x0

normalzoom = 0x0

see
org.apache.poi.hssf.record.WindowTwoRecord
see
org.apache.poi.hssf.record.Record
return
record containing a WindowTwoRecord

        WindowTwoRecord retval = new WindowTwoRecord();

        retval.setOptions(( short ) 0x6b6);
        retval.setTopRow(( short ) 0);
        retval.setLeftCol(( short ) 0);
        retval.setHeaderColor(0x40);
        retval.setPageBreakZoom(( short ) 0);
        retval.setNormalZoom(( short ) 0);
        return retval;
    
public org.apache.poi.hssf.record.RecordfindFirstRecordBySid(short sid)
Returns the first occurance of a record matching a particular sid.

        for (Iterator iterator = records.iterator(); iterator.hasNext(); )
        {
            Record record = ( Record ) iterator.next();

            if (record.getSid() == sid)
            {
                return record;
            }
        }
        return null;
    
public intfindFirstRecordLocBySid(short sid)
Finds the first occurance of a record matching a particular sid and returns it's position.

param
sid the sid to search for
return
the record position of the matching record or -1 if no match is made.

        int index = 0;
        for (Iterator iterator = records.iterator(); iterator.hasNext(); )
        {
            Record record = ( Record ) iterator.next();

            if (record.getSid() == sid)
            {
                return index;
            }
            index++;
        }
        return -1;
    
public shortgetActiveCellCol()
Returns the active column

see
org.apache.poi.hssf.record.SelectionRecord
return
row the active column index

        if (selection == null)
        {
            return (short) 0;
        }
        return selection.getActiveCellCol();
    
public intgetActiveCellRow()
Returns the active row

see
org.apache.poi.hssf.record.SelectionRecord
return
row the active row index

        if (selection == null)
        {
            return 0;
        }
        return selection.getActiveCellRow();
    
public java.util.IteratorgetColumnBreaks()
Returns all the column page breaks

return
all the column page breaks

    	return colBreaks.getBreaksIterator();
    
public shortgetColumnWidth(short column)
get the width of a given column in units of 1/20th of a point width (twips?)

param
column index
see
org.apache.poi.hssf.record.DefaultColWidthRecord
see
org.apache.poi.hssf.record.ColumnInfoRecord
see
#setColumnWidth(short,short)
return
column width in units of 1/20th of a point (twips?)

        short            retval = 0;
        ColumnInfoRecord ci     = null;

        if (columns != null)
        {
            int count=columns.getNumColumns();
            for ( int k=0;k<count;k++ )
            {
                ci = columns.getColInfo(k);
                if ((ci.getFirstColumn() <= column)
                        && (column <= ci.getLastColumn()))
                {
                    break;
                }
                ci = null;
            }
        }
        if (ci != null)
        {
            retval = ci.getColumnWidth();
        }
        else
        {
            retval = defaultcolwidth.getColWidth();
        }
        return retval;
    
public shortgetDefaultColumnWidth()
get the default column width for the sheet (if the columns do not define their own width)

return
default column width

        return defaultcolwidth.getColWidth();
    
public shortgetDefaultRowHeight()
get the default row height for the sheet (if the rows do not define their own height)

return
default row height

        return defaultrowheight.getRowHeight();
    
public intgetDimsLoc()
get the location of the DimensionsRecord (which is the last record before the value section)

return
location in the array of records of the DimensionsRecord

        if (log.check( POILogger.DEBUG ))
            log.log(POILogger.DEBUG, "getDimsLoc dimsloc= " + dimsloc);
        return dimsloc;
    
public intgetEofLoc()

        return eofLoc;
    
public org.apache.poi.hssf.record.FooterRecordgetFooter()
Returns the FooterRecord.

return
FooterRecord for the sheet.

	    return footer;
    
public org.apache.poi.hssf.record.GridsetRecordgetGridsetRecord()
Gets the gridset record for this sheet.

        return gridset;
    
public org.apache.poi.hssf.record.HeaderRecordgetHeader()
Returns the HeaderRecord.

return
HeaderRecord for the sheet.

	return header;
    
public shortgetLeftCol()

        	return (windowTwo==null) ? (short) 0 : windowTwo.getLeftCol();
        
public intgetLoc()
Returns the location pointer to the first record to look for when adding rows/values

        if (log.check( POILogger.DEBUG ))
            log.log(POILogger.DEBUG, "sheet.getLoc():" + loc);
        return loc;
    
public doublegetMargin(short margin)
Gets the size of the margin in inches.

param
margin which margin to get
return
the size of the margin

	if (getMargins()[margin] != null)
	    return margins[margin].getMargin();
	else {
	    switch ( margin )
		{
		case LeftMargin:
		    return .75;
		case RightMargin:
		    return .75;
		case TopMargin:
		    return 1.0;
		case BottomMargin:
		    return 1.0;
		default :
		    throw new RuntimeException( "Unknown margin constant:  " + margin );
		}
	}
    
protected org.apache.poi.hssf.record.Margin[]getMargins()
Returns the array of margins. If not created, will create.

return
the array of marings.

        if (margins == null)
            margins = new Margin[4];
    	return margins;
    
public MergeCellsRecord.MergedRegiongetMergedRegionAt(int index)

        //safety checks
        if (index >= numMergedRegions || mergedRecords.size() == 0)
            return null;
            
        int pos = 0;
        int startNumRegions = 0;
        
        //optimisation for current record
        if (numMergedRegions - index < merged.getNumAreas())
        {
            pos = mergedRecords.size() - 1;
            startNumRegions = numMergedRegions - merged.getNumAreas();
        }
        else
        {
            for (int n = 0; n < mergedRecords.size(); n++)
            {
                MergeCellsRecord record = (MergeCellsRecord) mergedRecords.get(n);
                if (startNumRegions + record.getNumAreas() > index)
                {
                    pos = n;
                    break;
                }
                startNumRegions += record.getNumAreas(); 
            }
        }
        return ((MergeCellsRecord) mergedRecords.get(pos)).getAreaAt(index - startNumRegions);
    
public org.apache.poi.hssf.record.RowRecordgetNextRow()
get the NEXT RowRecord (from LOC). The first record that is a Row record (starting at LOC) will be returned.

This method is "loc" sensitive. Meaning you need to set LOC to where you want it to start searching. If you don't know do this: setLoc(getDimsLoc). When adding several rows you can just start at the last one by leaving loc at what this sets it to. For this method, set loc to dimsloc to start with. subsequent calls will return rows in (physical) sequence or NULL when you get to the end.

return
RowRecord representing the next row record or NULL if there are no more
see
#setLoc(int)

        if (log.check( POILogger.DEBUG ))
            log.log(POILogger.DEBUG, "getNextRow loc= " + loc);
        if (rowRecIterator == null)
        {
            rowRecIterator = rows.getIterator();
        }
        if (!rowRecIterator.hasNext())
        {
            return null;
        }
        return ( RowRecord ) rowRecIterator.next();

/*        if (this.getLoc() < records.size())
        {
            for (int k = this.getLoc(); k < records.size(); k++)
            {
                Record rec = ( Record ) records.get(k);

                this.setLoc(k + 1);
                if (rec.getSid() == RowRecord.sid)
                {
                    return ( RowRecord ) rec;
                }
            }
        }*/
    
public org.apache.poi.hssf.record.CellValueRecordInterfacegetNextValueRecord()
get the NEXT value record (from LOC). The first record that is a value record (starting at LOC) will be returned.

This method is "loc" sensitive. Meaning you need to set LOC to where you want it to start searching. If you don't know do this: setLoc(getDimsLoc). When adding several rows you can just start at the last one by leaving loc at what this sets it to. For this method, set loc to dimsloc to start with, subsequent calls will return values in (physical) sequence or NULL when you get to the end.

return
CellValueRecordInterface representing the next value record or NULL if there are no more
see
#setLoc(int)

        if (log.check( POILogger.DEBUG ))
            log.log(POILogger.DEBUG, "getNextValue loc= " + loc);
        if (valueRecIterator == null)
        {
            valueRecIterator = cells.getIterator();
        }
        if (!valueRecIterator.hasNext())
        {
            return null;
        }
        return ( CellValueRecordInterface ) valueRecIterator.next();

        /*
         *      if (this.getLoc() < records.size())
         *     {
         *         for (int k = getLoc(); k < records.size(); k++)
         *         {
         *             Record rec = ( Record ) records.get(k);
         *
         *             this.setLoc(k + 1);
         *             if (rec instanceof CellValueRecordInterface)
         *             {
         *                 return ( CellValueRecordInterface ) rec;
         *             }
         *         }
         *     }
         *     return null;
         */
    
public intgetNumColumnBreaks()
Returns the number of column page breaks

return
the number of column page breaks

    	return (colBreaks == null) ? 0 : (int)colBreaks.getNumBreaks();
    
public intgetNumMergedRegions()

        return numMergedRegions;
    
public intgetNumRecords()
Returns the number of low level binary records in this sheet. This adjusts things for the so called AgregateRecords.

see
org.apache.poi.hssf.record.Record

        checkCells();
        checkRows();
        if (log.check( POILogger.DEBUG ))
        {
            log.log(POILogger.DEBUG, "Sheet.getNumRecords");
            log.logFormatted(POILogger.DEBUG, "returning % + % + % - 2 = %", new int[]
            {
                records.size(), cells.getPhysicalNumberOfCells(),
                rows.getPhysicalNumberOfRows(),
                records.size() + cells.getPhysicalNumberOfCells()
                + rows.getPhysicalNumberOfRows() - 2
            });
        }
        return records.size() + cells.getPhysicalNumberOfCells()
               + rows.getPhysicalNumberOfRows() - 2;
    
public intgetNumRowBreaks()
Returns the number of row page breaks

return
the number of row page breaks

    	return (rowBreaks == null) ? 0 : (int)rowBreaks.getNumBreaks();
    
public org.apache.poi.hssf.util.PaneInformationgetPaneInformation()
Returns the information regarding the currently configured pane (split or freeze).

return
null if no pane configured, or the pane information.

      PaneRecord rec = (PaneRecord)findFirstRecordBySid(PaneRecord.sid);
      if (rec == null)
        return null;
        
      return new PaneInformation(rec.getX(), rec.getY(), rec.getTopRow(),
    		                     rec.getLeftColumn(), (byte)rec.getActivePane(), windowTwo.getFreezePanes());      
    
public intgetPreOffset()
get the preoffset when using DBCELL records (currently unused) - this is the position of this sheet within the whole file.

return
offset the offset of the sheet's BOF within the file.

        return preoffset;
    
public org.apache.poi.hssf.record.PrintGridlinesRecordgetPrintGridlines()
Returns the PrintGridlinesRecord.

return
PrintGridlinesRecord for the sheet.

	    return printGridlines;
    
public org.apache.poi.hssf.record.PrintSetupRecordgetPrintSetup()
Returns the PrintSetupRecord.

return
PrintSetupRecord for the sheet.

	    return printSetup;
    
public org.apache.poi.hssf.record.ProtectRecordgetProtect()
Returns the ProtectRecord. If one is not contained in the sheet, then one is created.

return

    	if (protect == null) {
    		protect = (ProtectRecord)createProtect();
    		//Insert the newlycreated protect record at the end of the record (just before the EOF)
    		int loc = findFirstRecordLocBySid(EOFRecord.sid);
    		records.add(loc, protect);    		
    	}
        return protect;
    
public java.util.ListgetRecords()

        return records;
    
public org.apache.poi.hssf.record.RowRecordgetRow(int rownum)
get the NEXT (from LOC) RowRecord where rownumber matches the given rownum. The first record that is a Row record (starting at LOC) that has the same rownum as the given rownum will be returned.

This method is "loc" sensitive. Meaning you need to set LOC to where you want it to start searching. If you don't know do this: setLoc(getDimsLoc). When adding several rows you can just start at the last one by leaving loc at what this sets it to. For this method, set loc to dimsloc to start with. subsequent calls will return rows in (physical) sequence or NULL when you get to the end.

param
rownum which row to return (careful with LOC)
return
RowRecord representing the next row record or NULL if there are no more
see
#setLoc(int)

        if (log.check( POILogger.DEBUG ))
            log.log(POILogger.DEBUG, "getNextRow loc= " + loc);
        return rows.getRow(rownum);

        /*
         * if (this.getLoc() < records.size())
         * {
         *   for (int k = this.getLoc(); k < records.size(); k++)
         *   {
         *       Record rec = ( Record ) records.get(k);
         *
         *       this.setLoc(k + 1);
         *       if (rec.getSid() == RowRecord.sid)
         *       {
         *           if ((( RowRecord ) rec).getRowNumber() == rownum)
         *           {
         *               return ( RowRecord ) rec;
         *           }
         *       }
         *   }
         * }
         */

        // return null;
    
public java.util.IteratorgetRowBreaks()
Returns all the row page breaks

return
all the row page breaks

    	return rowBreaks.getBreaksIterator();
    
public org.apache.poi.hssf.record.SelectionRecordgetSelection()

        return selection;
    
public intgetSize()

        int retval = 0;

        for ( int k = 0; k < records.size(); k++ )
        {
            retval += ( (Record) records.get( k ) ).getRecordSize();
        }
        //Add space for the IndexRecord
        if (rows != null) {
            final int blocks = rows.getRowBlockCount();
            retval += IndexRecord.getRecordSizeForBlockCount(blocks);

            //Add space for the DBCell records
            //Once DBCell per block.
            //8 bytes per DBCell (non variable section)
            //2 bytes per row reference
            retval += (8 * blocks);
            for (Iterator itr = rows.getIterator(); itr.hasNext();) {
                RowRecord row = (RowRecord)itr.next();
                if (cells != null && cells.rowHasCells(row.getRowNumber()))
                    retval += 2;
            }
        }
        return retval;
    
public shortgetTopRow()

    	return (windowTwo==null) ? (short) 0 : windowTwo.getTopRow();
    
public shortgetXFIndexForColAt(short column)
get the index to the ExtendedFormatRecord "associated" with the column at specified 0-based index. (In this case, an ExtendedFormatRecord index is actually associated with a ColumnInfoRecord which spans 1 or more columns)
Returns the index to the default ExtendedFormatRecord (0xF) if no ColumnInfoRecord exists that includes the column index specified.

param
column
return
index of ExtendedFormatRecord associated with ColumnInfoRecord that includes the column index or the index of the default ExtendedFormatRecord (0xF)

        short retval = 0;
        ColumnInfoRecord ci = null;
        if (columns != null) {
          int count=columns.getNumColumns();
          for ( int k=0;k<count;k++ )
          {
                ci = columns.getColInfo(k);
                if ((ci.getFirstColumn() <= column)
                        && (column <= ci.getLastColumn())) {
                    break;
                }
                ci = null;
            }
        }
        retval = (ci != null) ? ci.getXFIndex() : 0xF;
        return retval;
    
public voidgroupColumnRange(short fromColumn, short toColumn, boolean indent)
Creates an outline group for the specified columns.

param
fromColumn group from this column (inclusive)
param
toColumn group to this column (inclusive)
param
indent if true the group will be indented by one level, if false indenting will be removed by one level.


        // Set the level for each column
        columns.groupColumnRange( fromColumn, toColumn, indent);

        // Determine the maximum overall level
        int maxLevel = 0;
        int count=columns.getNumColumns();
        for ( int k=0;k<count;k++ )
        {
            ColumnInfoRecord columnInfoRecord = columns.getColInfo(k);
            maxLevel = Math.max(columnInfoRecord.getOutlineLevel(), maxLevel);
        }

        GutsRecord guts = (GutsRecord) findFirstRecordBySid( GutsRecord.sid );
        guts.setColLevelMax( (short) ( maxLevel+1 ) );
        if (maxLevel == 0)
            guts.setTopColGutter( (short)0 );
        else
            guts.setTopColGutter( (short) ( 29 + (12 * (maxLevel-1)) ) );
    
public voidgroupRowRange(int fromRow, int toRow, boolean indent)

        checkRows();
        for (int rowNum = fromRow; rowNum <= toRow; rowNum++)
        {
            RowRecord row = getRow( rowNum );
            if (row == null)
            {
                row = createRow( rowNum );
                addRow( row );
            }
            int level = row.getOutlineLevel();
            if (indent) level++; else level--;
            level = Math.max(0, level);
            level = Math.min(7, level);
            row.setOutlineLevel((short) ( level ));
        }

        recalcRowGutter();
    
public booleanisColumnBroken(short column)
Queries if the specified column has a page break

return
true if the specified column has a page break

    	return (colBreaks == null) ? false : colBreaks.getBreak(column) != null;
    
public booleanisColumnHidden(short column)
Get the hidden property for a given column.

param
column index
see
org.apache.poi.hssf.record.DefaultColWidthRecord
see
org.apache.poi.hssf.record.ColumnInfoRecord
see
#setColumnHidden(short,boolean)
return
whether the column is hidden or not.

        boolean          retval = false;
        ColumnInfoRecord ci     = null;

        if (columns != null)
        {
            for ( Iterator iterator = columns.getIterator(); iterator.hasNext(); )
            {
                ci = ( ColumnInfoRecord ) iterator.next();
                if ((ci.getFirstColumn() <= column)
                        && (column <= ci.getLastColumn()))
                {
                    break;
                }
                ci = null;
            }
        }
        if (ci != null)
        {
            retval = ci.getHidden();
        }
        return retval;
    
public booleanisDisplayFormulas()
Returns if formulas are displayed.

return
whether formulas are displayed

	return windowTwo.getDisplayFormulas();
    
public booleanisDisplayGridlines()
Returns if gridlines are displayed.

return
whether gridlines are displayed

	return windowTwo.getDisplayGridlines();
    
public booleanisDisplayRowColHeadings()
Returns if RowColHeadings are displayed.

return
whether RowColHeadings are displayed

	    return windowTwo.getDisplayRowColHeadings();
    
public booleanisGridsPrinted()
get whether gridlines are printed.

return
true if printed

    	if (gridset == null) {
    		gridset = (GridsetRecord)createGridset();
    		//Insert the newlycreated Gridset record at the end of the record (just before the EOF)
    		int loc = findFirstRecordLocBySid(EOFRecord.sid);
    		records.add(loc, gridset);     		
    	}
        return !gridset.getGridset();
    
public booleanisRowBroken(int row)
Queries if the specified row has a page break

param
row
return
true if the specified row has a page break

    	return (rowBreaks == null) ? false : rowBreaks.getBreak((short)row) != null;
    
public voidpreSerialize()
Perform any work necessary before the sheet is about to be serialized. For instance the escher aggregates size needs to be calculated before serialization so that the dgg record (which occurs first) can be written.

        for ( Iterator iterator = getRecords().iterator(); iterator.hasNext(); )
        {
            Record r = (Record) iterator.next();
            if (r instanceof EscherAggregate)
                r.getRecordSize();   // Trigger flatterning of user model and corresponding update of dgg record.
        }
    
private voidrecalcRowGutter()

        int maxLevel = 0;
        Iterator iterator = rows.getIterator();
        while ( iterator.hasNext() )
        {
            RowRecord rowRecord = (RowRecord) iterator.next();
            maxLevel = Math.max(rowRecord.getOutlineLevel(), maxLevel);
        }

        GutsRecord guts = (GutsRecord) findFirstRecordBySid( GutsRecord.sid );
        guts.setRowLevelMax( (short) ( maxLevel + 1 ) );
        guts.setLeftRowGutter( (short) ( 29 + (12 * (maxLevel)) ) );
    
public voidremoveColumnBreak(short column)
Removes a page break at the indicated column

    	if (colBreaks == null)
    		throw new IllegalArgumentException("Sheet does not define any column breaks");
    	
    	colBreaks.removeBreak(column);
    
public voidremoveMergedRegion(int index)

        //safety checks
        if (index >= numMergedRegions || mergedRecords.size() == 0)
           return;
            
        int pos = 0;
        int startNumRegions = 0;
        
        //optimisation for current record
        if (numMergedRegions - index < merged.getNumAreas())
        {
            pos = mergedRecords.size() - 1;
            startNumRegions = numMergedRegions - merged.getNumAreas(); 
        }
        else
        {
            for (int n = 0; n < mergedRecords.size(); n++)
            {
                MergeCellsRecord record = (MergeCellsRecord) mergedRecords.get(n);
                if (startNumRegions + record.getNumAreas() > index)
                {
                    pos = n;
                    break;
                }
                startNumRegions += record.getNumAreas(); 
            }
        }

        MergeCellsRecord rec = (MergeCellsRecord) mergedRecords.get(pos);
        rec.removeAreaAt(index - startNumRegions);
        numMergedRegions--;
        if (rec.getNumAreas() == 0)
        {
			mergedRecords.remove(pos);
			//get rid of the record from the sheet
			records.remove(merged);            
            if (merged == rec) {
            	//pull up the LAST record for operations when we finally
            	//support continue records for mergedRegions
            	if (mergedRecords.size() > 0) {
            		merged = (MergeCellsRecord) mergedRecords.get(mergedRecords.size() - 1);
            	} else {
            		merged = null;
            	}
            }
        }
    
public voidremoveRow(org.apache.poi.hssf.record.RowRecord row)
Removes a row record This method is not loc sensitive, it resets loc to = dimsloc so no worries.

param
row the row record to remove

        checkRows();
        // IndexRecord index = null;

        setLoc(getDimsLoc());
        rows.removeRow(row);

        /*
         * for (int k = loc; k < records.size(); k++)
         * {
         *   Record rec = ( Record ) records.get(k);
         *
         *   // checkDimsLoc(rec,k);
         *   if (rec.getSid() == RowRecord.sid)
         *   {
         *       RowRecord rowrec = ( RowRecord ) rec;
         *
         *       if (rowrec.getRowNumber() == row.getRowNumber())
         *       {
         *           records.remove(k);
         *           break;
         *       }
         *   }
         *   if (rec.getSid() == WindowTwoRecord.sid)
         *   {
         *       break;
         *   }
         * }
         */
    
public voidremoveRowBreak(int row)
Removes a page break at the indicated row

param
row

    	if (rowBreaks == null)
    		throw new IllegalArgumentException("Sheet does not define any row breaks");
    	rowBreaks.removeBreak((short)row);
    
public voidremoveValueRecord(int row, org.apache.poi.hssf.record.CellValueRecordInterface col)
remove a value record from the records array. This method is not loc sensitive, it resets loc to = dimsloc so no worries.

param
row - the row of the value record you wish to remove
param
col - a record supporting the CellValueRecordInterface.
see
org.apache.poi.hssf.record.CellValueRecordInterface

        checkCells();
        log.logFormatted(POILogger.DEBUG, "remove value record row,dimsloc %,%",
                         new int[]{row, dimsloc} );
        loc = dimsloc;
        cells.removeCell(col);

        /*
         * for (int k = loc; k < records.size(); k++)
         * {
         *   Record rec = ( Record ) records.get(k);
         *
         *   // checkDimsLoc(rec,k);
         *   if (rec.isValue())
         *   {
         *       CellValueRecordInterface cell =
         *           ( CellValueRecordInterface ) rec;
         *
         *       if ((cell.getRow() == col.getRow())
         *               && (cell.getColumn() == col.getColumn()))
         *       {
         *           records.remove(k);
         *           break;
         *       }
         *   }
         * }
         */
    
public voidreplaceValueRecord(org.apache.poi.hssf.record.CellValueRecordInterface newval)
replace a value record from the records array. This method is not loc sensitive, it resets loc to = dimsloc so no worries.

param
newval - a record supporting the CellValueRecordInterface. this will replace the cell value with the same row and column. If there isn't one, one will be added.

        checkCells();
        setLoc(dimsloc);
        if (log.check( POILogger.DEBUG ))
            log.log(POILogger.DEBUG, "replaceValueRecord ");
        //The ValueRecordsAggregate use a tree map underneath.
        //The tree Map uses the CellValueRecordInterface as both the
        //key and the value, if we dont do a remove, then
        //the previous instance of the key is retained, effectively using 
        //double the memory
        cells.removeCell(newval);
        cells.insertCell(newval);

        /*
         * CellValueRecordInterface oldval = getNextValueRecord();
         *
         * while (oldval != null)
         * {
         *   if (oldval.isEqual(newval))
         *   {
         *       records.set(( short ) (getLoc() - 1), newval);
         *       return;
         *   }
         *   oldval = getNextValueRecord();
         * }
         * addValueRecord(newval.getRow(), newval);
         * setLoc(dimsloc);
         */
    
public intserialize(int offset, byte[] data)
Serializes all records in the sheet into one big byte array. Use this to write the sheet out.

param
offset to begin write at
param
data array containing the binary representation of the records in this sheet

        if (log.check( POILogger.DEBUG ))
            log.log(POILogger.DEBUG, "Sheet.serialize using offsets");

        int pos       = offset;
        boolean haveSerializedIndex = false;

        for (int k = 0; k < records.size(); k++)
        {
            Record record = (( Record ) records.get(k));
            
            //Once the rows have been found in the list of records, start
            //writing out the blocked row information. This includes the DBCell references
            if (record instanceof RowRecordsAggregate) {
              pos += ((RowRecordsAggregate)record).serialize(pos, data, cells);   // rec.length;
            } else if (record instanceof ValueRecordsAggregate) {
              //Do nothing here. The records were serialized during the RowRecordAggregate block serialization
            } else {
              pos += record.serialize(pos, data );   // rec.length;
            }
            //If the BOF record was just serialized then add the IndexRecord
            if (record.getSid() == BOFRecord.sid) {
              //Can there be more than one BOF for a sheet? If not then we can
              //remove this guard. So be safe it is left here.
              if (rows != null && !haveSerializedIndex) {
                haveSerializedIndex = true;
                pos += serializeIndexRecord(k, pos, data);
              }
            }

            //// uncomment to test record sizes ////
//            System.out.println( record.getClass().getName() );
//            byte[] data2 = new byte[record.getRecordSize()];
//            record.serialize(0, data2 );   // rec.length;
//            if (LittleEndian.getUShort(data2, 2) != record.getRecordSize() - 4
//                    && record instanceof RowRecordsAggregate == false
//                    && record instanceof ValueRecordsAggregate == false
//                    && record instanceof EscherAggregate == false)
//            {
//                throw new RuntimeException("Blah!!!  Size off by " + ( LittleEndian.getUShort(data2, 2) - record.getRecordSize() - 4) + " records.");
//            }

//asd:            int len = record.serialize(pos + offset, data );

            /////  DEBUG BEGIN /////
//asd:            if (len != record.getRecordSize())
//asd:                throw new IllegalStateException("Record size does not match serialized bytes.  Serialized size = " + len + " but getRecordSize() returns " + record.getRecordSize() + ". Record object is " + record.getClass());
            /////  DEBUG END /////

//asd:            pos += len;   // rec.length;

        }
        if (log.check( POILogger.DEBUG ))
            log.log(POILogger.DEBUG, "Sheet.serialize returning ");
        return pos-offset;
    
private intserializeIndexRecord(int BOFRecordIndex, int offset, byte[] data)

      IndexRecord index = new IndexRecord();
      index.setFirstRow(rows.getFirstRowNum());
      index.setLastRowAdd1(rows.getLastRowNum()+1);
      //Calculate the size of the records from the end of the BOF
      //and up to the RowRecordsAggregate...
      int sheetRecSize = 0;
      for (int j = BOFRecordIndex+1; j < records.size(); j++)
      {
        Record tmpRec = (( Record ) records.get(j));
        if (tmpRec instanceof RowRecordsAggregate)
          break;
        sheetRecSize+= tmpRec.getRecordSize();
      }
      //Add the references to the DBCells in the IndexRecord (one for each block)
      int blockCount = rows.getRowBlockCount();
      //Calculate the size of this IndexRecord
      int indexRecSize = IndexRecord.getRecordSizeForBlockCount(blockCount);

      int rowBlockOffset = 0;
      int cellBlockOffset = 0;
      int dbCellOffset = 0;
      for (int block=0;block<blockCount;block++) {
        rowBlockOffset += rows.getRowBlockSize(block);
        cellBlockOffset += null == cells ? 0 : cells.getRowCellBlockSize(rows.getStartRowNumberForBlock(block),
                                                     rows.getEndRowNumberForBlock(block));
        //Note: The offsets are relative to the Workbook BOF. Assume that this is
        //0 for now.....
        index.addDbcell(offset + indexRecSize + sheetRecSize + dbCellOffset + rowBlockOffset + cellBlockOffset);
        //Add space required to write the dbcell record(s) (whose references were just added).
        dbCellOffset += (8 + (rows.getRowCountForBlock(block) * 2));
      }
      return index.serialize(offset, data);
    
public voidsetActiveCellCol(short col)
Sets the active column

param
col the column index
see
org.apache.poi.hssf.record.SelectionRecord

        //shouldn't have a sheet w/o a SelectionRecord, but best to guard anyway
        if (selection != null)
        {
            selection.setActiveCellCol(col);
        }
    
public voidsetActiveCellRow(int row)
Sets the active row

param
row the row index
see
org.apache.poi.hssf.record.SelectionRecord

        //shouldn't have a sheet w/o a SelectionRecord, but best to guard anyway
        if (selection != null)
        {
            selection.setActiveCellRow(row);
        }
    
public voidsetColumn(short column, java.lang.Short width, java.lang.Integer level, java.lang.Boolean hidden, java.lang.Boolean collapsed)

        if (columns == null)
            columns = new ColumnInfoRecordsAggregate();

        columns.setColumn( column, null, width, level, hidden, collapsed );
    
public voidsetColumn(short column, java.lang.Short xfStyle, java.lang.Short width, java.lang.Integer level, java.lang.Boolean hidden, java.lang.Boolean collapsed)

        if (columns == null)
            columns = new ColumnInfoRecordsAggregate();

        columns.setColumn( column, xfStyle, width, level, hidden, collapsed );
    
public voidsetColumnBreak(short column, short fromRow, short toRow)
Sets a page break at the indicated column

    	if (colBreaks == null) {
            int loc = findFirstRecordLocBySid(WindowTwoRecord.sid);
            colBreaks = new PageBreakRecord(PageBreakRecord.VERTICAL_SID);
            records.add(loc, colBreaks);
    	}    	
    	colBreaks.addBreak(column, fromRow, toRow);
    
public voidsetColumnGroupCollapsed(short columnNumber, boolean collapsed)

        if (collapsed)
        {
            columns.collapseColumn( columnNumber );
        }
        else
        {
            columns.expandColumn( columnNumber );
        }
    
public voidsetColumnHidden(short column, boolean hidden)
Get the hidden property for a given column.

param
column - the column number
param
hidden - whether the column is hidden or not

        setColumn( column, null, null, new Boolean(hidden), null);
    
public voidsetColumnWidth(short column, short width)
set the width for a given column in 1/20th of a character width units

param
column - the column number
param
width (in units of 1/20th of a character width)

        setColumn( column, new Short(width), null, null, null);
    
public voidsetDefaultColumnWidth(short dcw)
set the default column width for the sheet (if the columns do not define their own width)

param
dcw default column width

        defaultcolwidth.setColWidth(dcw);
    
public voidsetDefaultRowHeight(short dch)
set the default row height for the sheet (if the rows do not define their own height)

        defaultrowheight.setRowHeight(dch);
    
public voidsetDimensions(int firstrow, short firstcol, int lastrow, short lastcol)
Per an earlier reported bug in working with Andy Khan's excel read library. This sets the values in the sheet's DimensionsRecord object to be correct. Excel doesn't really care, but we want to play nice with other libraries.

see
org.apache.poi.hssf.record.DimensionsRecord

        if (log.check( POILogger.DEBUG ))
        {
            log.log(POILogger.DEBUG, "Sheet.setDimensions");
            log.log(POILogger.DEBUG,
                    (new StringBuffer("firstrow")).append(firstrow)
                        .append("firstcol").append(firstcol).append("lastrow")
                        .append(lastrow).append("lastcol").append(lastcol)
                        .toString());
        }
        dims.setFirstCol(firstcol);
        dims.setFirstRow(firstrow);
        dims.setLastCol(lastcol);
        dims.setLastRow(lastrow);
        if (log.check( POILogger.DEBUG ))
            log.log(POILogger.DEBUG, "Sheet.setDimensions exiting");
    
public voidsetDisplayFormulas(boolean show)
Sets whether the formulas are shown in a viewer.

param
show whether to show formulas or not

        windowTwo.setDisplayFormulas(show);
    
public voidsetDisplayGridlines(boolean show)
Sets whether the gridlines are shown in a viewer.

param
show whether to show gridlines or not

        windowTwo.setDisplayGridlines(show);
    
public voidsetDisplayRowColHeadings(boolean show)
Sets whether the RowColHeadings are shown in a viewer.

param
show whether to show RowColHeadings or not

        windowTwo.setDisplayRowColHeadings(show);
    
public voidsetFooter(org.apache.poi.hssf.record.FooterRecord newFooter)
Sets the FooterRecord.

param
newFooter The new FooterRecord for the sheet.

	    footer = newFooter;
    
public voidsetGridsPrinted(boolean value)
set whether gridlines printed or not.

param
value True if gridlines printed.

        gridset.setGridset(!value);
    
public voidsetHeader(org.apache.poi.hssf.record.HeaderRecord newHeader)
Sets the HeaderRecord.

param
newHeader The new HeaderRecord for the sheet.

    	header = newHeader;
    
public voidsetLeftCol(short leftCol)
Sets the left column to show in desktop window pane.

param
leftCol the left column to show in desktop window pane

        	if (windowTwo!=null) 
        	{   
        	windowTwo.setLeftCol(leftCol);
        	}
        
public voidsetLoc(int loc)
set the locator for where we should look for the next value record. The algorythm will actually start here and find the correct location so you can set this to 0 and watch performance go down the tubes but it will work. After a value is set this is automatically advanced. Its also set by the create method. So you probably shouldn't mess with this unless you have a compelling reason why or the help for the method you're calling says so. Check the other methods for whether they care about the loc pointer. Many of the "modify" and "remove" methods re-initialize this to "dimsloc" which is the location of the Dimensions Record and presumably the start of the value section (at or around 19 dec).

param
loc the record number to start at

        valueRecIterator = null;
        if (log.check( POILogger.DEBUG ))
            log.log(POILogger.DEBUG, "sheet.setLoc(): " + loc);
        this.loc = loc;
    
public voidsetMargin(short margin, double size)
Sets the size of the margin in inches.

param
margin which margin to get
param
size the size of the margin

	Margin m = getMargins()[margin];
	if (m  == null) {
	    switch ( margin )
		{
		case LeftMargin:
		    m = new LeftMarginRecord();
		    records.add( getDimsLoc() + 1, m );
		    break;
		case RightMargin:
		    m = new RightMarginRecord();
		    records.add( getDimsLoc() + 1, m );
		    break;
		case TopMargin:
		    m = new TopMarginRecord();
		    records.add( getDimsLoc() + 1, m );
		    break;
		case BottomMargin:
		    m = new BottomMarginRecord();
		    records.add( getDimsLoc() + 1, m );
		    break;
		default :
		    throw new RuntimeException( "Unknown margin constant:  " + margin );
		}
	    margins[margin] = m;
	}
	m.setMargin( size );
    
public voidsetPreOffset(int offset)
Set the preoffset when using DBCELL records (currently unused) - this is the position of this sheet within the whole file.

param
offset the offset of the sheet's BOF within the file.

        this.preoffset = offset;
    
public voidsetPrintGridlines(org.apache.poi.hssf.record.PrintGridlinesRecord newPrintGridlines)
Sets the PrintGridlinesRecord.

param
newPrintGridlines The new PrintGridlinesRecord for the sheet.

	    printGridlines = newPrintGridlines;
    
public voidsetPrintSetup(org.apache.poi.hssf.record.PrintSetupRecord newPrintSetup)
Sets the PrintSetupRecord.

param
newPrintSetup The new PrintSetupRecord for the sheet.

	    printSetup = newPrintSetup;
    
public voidsetRowBreak(int row, short fromCol, short toCol)
Sets a page break at the indicated row

param
row

 
    	if (rowBreaks == null) {
            int loc = findFirstRecordLocBySid(WindowTwoRecord.sid);
            rowBreaks = new PageBreakRecord(PageBreakRecord.HORIZONTAL_SID);
            records.add(loc, rowBreaks);
    	}
    	rowBreaks.addBreak((short)row, fromCol, toCol);
    
public voidsetRowGroupCollapsed(int row, boolean collapse)

        if (collapse)
        {
            rows.collapseRow( row );
        }
        else
        {
            rows.expandRow( row );
        }
    
public voidsetSCLRecord(org.apache.poi.hssf.record.SCLRecord sclRecord)
Sets the SCL record or creates it in the correct place if it does not already exist.

param
sclRecord The record to set.

        int oldRecordLoc = findFirstRecordLocBySid(SCLRecord.sid);
        if (oldRecordLoc == -1)
        {
            // Insert it after the window record
            int windowRecordLoc = findFirstRecordLocBySid(WindowTwoRecord.sid);
            records.add(windowRecordLoc+1, sclRecord);
        }
        else
        {
            records.set(oldRecordLoc, sclRecord);
        }

    
public voidsetSelected(boolean sel)
Sets whether the sheet is selected

param
sel True to select the sheet, false otherwise.

        windowTwo.setSelected(sel);
    
public voidsetSelection(org.apache.poi.hssf.record.SelectionRecord selection)

        this.selection = selection;
    
public voidsetTopRow(short topRow)

    	if (windowTwo!=null) 
    	{
    		windowTwo.setTopRow(topRow);
    	}
    
public voidshiftBreaks(org.apache.poi.hssf.record.PageBreakRecord breaks, short start, short stop, int count)
Shifts all the page breaks in the range "count" number of rows/columns

param
breaks The page record to be shifted
param
start Starting "main" value to shift breaks
param
stop Ending "main" value to shift breaks
param
count number of units (rows/columns) to shift by

   	
    	if(rowBreaks == null)
    		return;
    	Iterator iterator = breaks.getBreaksIterator();
    	List shiftedBreak = new ArrayList();
    	while(iterator.hasNext()) 
    	{
    		PageBreakRecord.Break breakItem = (PageBreakRecord.Break)iterator.next();
    		short breakLocation = breakItem.main;
    		boolean inStart = (breakLocation >= start);
    		boolean inEnd = (breakLocation <= stop);
    		if(inStart && inEnd)
    			shiftedBreak.add(breakItem);
    	}
    	
    	iterator = shiftedBreak.iterator();
    	while (iterator.hasNext()) {    		
			PageBreakRecord.Break breakItem = (PageBreakRecord.Break)iterator.next();
    		breaks.removeBreak(breakItem.main);
    		breaks.addBreak((short)(breakItem.main+count), breakItem.subFrom, breakItem.subTo);
    	}
    
public voidshiftColumnBreaks(short startingCol, short endingCol, short count)
Shifts the vertical page breaks for the indicated count

param
startingCol
param
endingCol
param
count

    	shiftBreaks(colBreaks, startingCol, endingCol, count);
    
public voidshiftRowBreaks(int startingRow, int endingRow, int count)
Shifts the horizontal page breaks for the indicated count

param
startingRow
param
endingRow
param
count

    	shiftBreaks(rowBreaks, (short)startingRow, (short)endingRow, (short)count);