FileDocCategorySizeDatePackage
HSSFSheet.javaAPI DocApache Poi 3.0.145833Thu May 31 18:44:06 BST 2007org.apache.poi.hssf.usermodel

HSSFSheet

public class HSSFSheet extends Object
High level representation of a worksheet.
author
Andrew C. Oliver (acoliver at apache dot org)
author
Glen Stampoultzis (glens at apache.org)
author
Libin Roman (romal at vistaportal.com)
author
Shawn Laubach (slaubach at apache dot org) (Just a little)
author
Jean-Pierre Paris (jean-pierre.paris at m4x dot org) (Just a little, too)
author
Yegor Kozlov (yegor at apache.org) (Autosizing columns)

Fields Summary
private static final int
DEBUG
public static final short
LeftMargin
public static final short
RightMargin
public static final short
TopMargin
public static final short
BottomMargin
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
public static final int
INITIAL_CAPACITY
Used for compile-time optimization. This is the initial size for the collection of rows. It is currently set to 20. If you generate larger sheets you may benefit by setting this to a higher number and recompiling a custom edition of HSSFSheet.
private org.apache.poi.hssf.model.Sheet
sheet
reference to the low level Sheet object
private TreeMap
rows
private org.apache.poi.hssf.model.Workbook
book
private int
firstrow
private int
lastrow
private static POILogger
log
Constructors Summary
protected HSSFSheet(org.apache.poi.hssf.model.Workbook book)
Creates new HSSFSheet - called by HSSFWorkbook to create a sheet from scratch. You should not be calling this from application code (its protected anyhow).

param
book - lowlevel Workbook object associated with the sheet.
see
org.apache.poi.hssf.usermodel.HSSFWorkbook#createSheet()


                                                 

      
    
        sheet = Sheet.createSheet();
        rows = new TreeMap();   // new ArrayList(INITIAL_CAPACITY);
        this.book = book;
    
protected HSSFSheet(org.apache.poi.hssf.model.Workbook book, org.apache.poi.hssf.model.Sheet sheet)
Creates an HSSFSheet representing the given Sheet object. Should only be called by HSSFWorkbook when reading in an exisiting file.

param
book - lowlevel Workbook object associated with the sheet.
param
sheet - lowlevel Sheet object this sheet will represent
see
org.apache.poi.hssf.usermodel.HSSFWorkbook#createSheet()

        this.sheet = sheet;
        rows = new TreeMap();
        this.book = book;
        setPropertiesFromSheet(sheet);
    
Methods Summary
public intaddMergedRegion(org.apache.poi.hssf.util.Region region)
adds a merged region of cells (hence those cells form one)

param
region (rowfrom/colfrom-rowto/colto) to merge
return
index of this region

        //return sheet.addMergedRegion((short) region.getRowFrom(),
        return sheet.addMergedRegion( region.getRowFrom(),
                region.getColumnFrom(),
                //(short) region.getRowTo(),
                region.getRowTo(),
                region.getColumnTo());
    
private voidaddRow(org.apache.poi.hssf.usermodel.HSSFRow row, boolean addLow)
add a row to the sheet

param
addLow whether to add the row to the low level model - false if its already there

        rows.put(row, row);
        if (addLow)
        {
            sheet.addRow(row.getRowRecord());
        }
        if (row.getRowNum() > getLastRowNum())
        {
            lastrow = row.getRowNum();
        }
        if (row.getRowNum() < getFirstRowNum())
        {
            firstrow = row.getRowNum();
        }
    
public voidautoSizeColumn(short column)
Adjusts the column width to fit the contents.

param
column the column index

        AttributedString str;
        TextLayout layout;
        /**
         * Excel measures columns in units of 1/256th of a character width
         * but the docs say nothing about what particular character is used.
         * '0' looks a good choice.
         */
        char defaultChar = '0";
       
        FontRenderContext frc = new FontRenderContext(null, true, true);

        HSSFWorkbook wb = new HSSFWorkbook(book);
        HSSFFont defaultFont = wb.getFontAt((short) 0);

        str = new AttributedString("" + defaultChar);
        str.addAttribute(TextAttribute.FAMILY, defaultFont.getFontName());
        str.addAttribute(TextAttribute.SIZE, new Float(defaultFont.getFontHeightInPoints()));
        layout = new TextLayout(str.getIterator(), frc);
        int defaultCharWidth = (int)layout.getAdvance();

        double width = -1;
        for (Iterator it = rowIterator(); it.hasNext();) {
            HSSFRow row = (HSSFRow) it.next();
            HSSFCell cell = row.getCell(column);
            if (cell == null) continue;

            HSSFCellStyle style = cell.getCellStyle();
            HSSFFont font = wb.getFontAt(style.getFontIndex());
            if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
                HSSFRichTextString rt = cell.getRichStringCellValue();
                String[] lines = rt.getString().split("\\n");
                for (int i = 0; i < lines.length; i++) {
                    str = new AttributedString(lines[i] + defaultChar);
                    str.addAttribute(TextAttribute.FAMILY, font.getFontName());
                    str.addAttribute(TextAttribute.SIZE, new Float(font.getFontHeightInPoints()));
                    if (font.getBoldweight() == HSSFFont.BOLDWEIGHT_BOLD) str.addAttribute(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
                    if (rt.numFormattingRuns() > 0) {
                        for (int j = 0; j < lines[i].length(); j++) {
                            int idx = rt.getFontAtIndex(j);
                            if (idx != 0) {
                                HSSFFont fnt = wb.getFontAt((short) idx);
                                str.addAttribute(TextAttribute.FAMILY, fnt.getFontName(), j, j + 1);
                                str.addAttribute(TextAttribute.SIZE, new Float(fnt.getFontHeightInPoints()), j, j + 1);
                            }
                        }
                    }
                    layout = new TextLayout(str.getIterator(), frc);
                    width = Math.max(width, layout.getAdvance() / defaultCharWidth);
                }
            } else {
                String sval = null;
                if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
                    HSSFDataFormat dataformat = wb.createDataFormat();
                    short idx = style.getDataFormat();
                    String format = dataformat.getFormat(idx).replaceAll("\"", "");
                    double value = cell.getNumericCellValue();
                    try {
                        NumberFormat fmt;
                        if ("General".equals(format))
                            fmt = new DecimalFormat();
                        else
                            fmt = new DecimalFormat(format);
                        sval = fmt.format(value);
                    } catch (Exception e) {
                        sval = "" + value;
                    }
                } else if (cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {
                    sval = String.valueOf(cell.getBooleanCellValue());
                }

                str = new AttributedString(sval + defaultChar);
                str.addAttribute(TextAttribute.FAMILY, font.getFontName());
                str.addAttribute(TextAttribute.SIZE, new Float(font.getFontHeightInPoints()));
                layout = new TextLayout(str.getIterator(), frc);
                width = Math.max(width, layout.getAdvance() / defaultCharWidth);
            }

            if (width != -1) {
                sheet.setColumnWidth(column, (short) (width * 256));
            }
        }
    
org.apache.poi.hssf.usermodel.HSSFSheetcloneSheet(org.apache.poi.hssf.model.Workbook book)

      return new HSSFSheet(book, sheet.cloneSheet());
    
public org.apache.poi.hssf.usermodel.HSSFPatriarchcreateDrawingPatriarch()
Creates the toplevel drawing patriarch. This will have the effect of removing any existing drawings on this sheet.

return
The new patriarch.

        // Create the drawing group if it doesn't already exist.
        book.createDrawingGroup();

        sheet.aggregateDrawingRecords(book.getDrawingManager());
        EscherAggregate agg = (EscherAggregate) sheet.findFirstRecordBySid(EscherAggregate.sid);
        HSSFPatriarch patriarch = new HSSFPatriarch(this);
        agg.clear();     // Initially the behaviour will be to clear out any existing shapes in the sheet when
                         // creating a new patriarch.
        agg.setPatriarch(patriarch);
        return patriarch;
    
public voidcreateFreezePane(int colSplit, int rowSplit, int leftmostColumn, int topRow)
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.

        if (colSplit < 0 || colSplit > 255) throw new IllegalArgumentException("Column must be between 0 and 255");
        if (rowSplit < 0 || rowSplit > 65535) throw new IllegalArgumentException("Row must be between 0 and 65535");
        if (leftmostColumn < colSplit) throw new IllegalArgumentException("leftmostColumn parameter must not be less than colSplit parameter");
        if (topRow < rowSplit) throw new IllegalArgumentException("topRow parameter must not be less than leftmostColumn parameter");
        getSheet().createFreezePane( colSplit, rowSplit, topRow, leftmostColumn );
    
public voidcreateFreezePane(int colSplit, int rowSplit)
Creates a split (freezepane). Any existing freezepane or split pane is overwritten.

param
colSplit Horizonatal position of split.
param
rowSplit Vertical position of split.

        createFreezePane( colSplit, rowSplit, colSplit, rowSplit );
    
public org.apache.poi.hssf.usermodel.HSSFRowcreateRow(int rownum)
Create a new row within the sheet and return the high level representation

param
rownum row number
return
High level HSSFRow object representing a row in the sheet
see
org.apache.poi.hssf.usermodel.HSSFRow
see
#removeRow(HSSFRow)

        HSSFRow row = new HSSFRow(book, sheet, rownum);

        addRow(row, true);
        return row;
    
private org.apache.poi.hssf.usermodel.HSSFRowcreateRowFromRecord(org.apache.poi.hssf.record.RowRecord row)
Used internally to create a high level Row object from a low level row object. USed when reading an existing file

param
row low level record to represent as a high level Row and add to sheet
return
HSSFRow high level representation

        HSSFRow hrow = new HSSFRow(book, sheet, row);

        addRow(hrow, false);
        return hrow;
    
public voidcreateSplitPane(int xSplitPos, int ySplitPos, int leftmostColumn, int topRow, 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

        getSheet().createSplitPane( xSplitPos, ySplitPos, topRow, leftmostColumn, activePane );
    
public voiddumpDrawingRecords(boolean fat)
Aggregates the drawing records and dumps the escher record hierarchy to the standard output.

        sheet.aggregateDrawingRecords(book.getDrawingManager());

        EscherAggregate r = (EscherAggregate) getSheet().findFirstRecordBySid(EscherAggregate.sid);
        List escherRecords = r.getEscherRecords();
        PrintWriter w = new PrintWriter(System.out);
        for ( Iterator iterator = escherRecords.iterator(); iterator.hasNext(); )
        {
            EscherRecord escherRecord = (EscherRecord) iterator.next();
            if (fat)
                System.out.println(escherRecord.toString());
            else
                escherRecord.display(w, 0);
        }
        w.flush();
    
private intfindFirstRow(int firstrow)
used internally to refresh the "first row" when the first row is removed.

        int rownum = firstrow + 1;
        HSSFRow r = getRow(rownum);

        while (r == null && rownum <= getLastRowNum())
        {
            r = getRow(++rownum);
        }

        if (rownum > getLastRowNum())
            return -1;

        return rownum;
    
private intfindLastRow(int lastrow)
used internally to refresh the "last row" when the last row is removed.

        int rownum = lastrow - 1;
        HSSFRow r = getRow(rownum);

        while (r == null && rownum > 0)
        {
            r = getRow(--rownum);
        }
        if (r == null)
          return -1;
        return rownum;
    
public booleangetAlternateExpression()
whether alternate expression evaluation is on

return
alternative expression evaluation or not

        return ((WSBoolRecord) sheet.findFirstRecordBySid(WSBoolRecord.sid))
                .getAlternateExpression();
    
public booleangetAlternateFormula()
whether alternative formula entry is on

return
alternative formulas or not

        return ((WSBoolRecord) sheet.findFirstRecordBySid(WSBoolRecord.sid))
                .getAlternateFormula();
    
public booleangetAutobreaks()
show automatic page breaks or not

return
whether to show auto page breaks

        return ((WSBoolRecord) sheet.findFirstRecordBySid(WSBoolRecord.sid))
                .getAutobreaks();
    
public org.apache.poi.hssf.usermodel.HSSFCommentgetCellComment(int row, int column)
Returns cell comment for the specified row and column

return
cell comment or null if not found

        return HSSFCell.findCellComment(sheet, row, column);
    
public short[]getColumnBreaks()
Retrieves all the vertical page breaks

return
all the vertical page breaks, or null if there are no column page breaks

    	//we can probably cache this information, but this should be a sparsely used function 
    	int count = sheet.getNumColumnBreaks();
    	if (count > 0) {
    	  short[] returnValue = new short[count];
    	  Iterator iterator = sheet.getColumnBreaks();
    	  int i = 0;
    	  while (iterator.hasNext()) {
    		PageBreakRecord.Break breakItem = (PageBreakRecord.Break)iterator.next();
    		returnValue[i++] = breakItem.main;
    	  }
    	  return returnValue;
    	}
    	return null;
    
public shortgetColumnWidth(short column)
get the width (in units of 1/256th of a character width )

param
column - the column to set (0-based)
return
width - the width in units of 1/256th of a character width

        return sheet.getColumnWidth(column);
    
public shortgetDefaultColumnWidth()
get the default column width for the sheet (if the columns do not define their own width) in characters

return
default column width

        return sheet.getDefaultColumnWidth();
    
public shortgetDefaultRowHeight()
get the default row height for the sheet (if the rows do not define their own height) in twips (1/20 of a point)

return
default row height

        return sheet.getDefaultRowHeight();
    
public floatgetDefaultRowHeightInPoints()
get the default row height for the sheet (if the rows do not define their own height) in points.

return
default row height in points

        return (sheet.getDefaultRowHeight() / 20);
    
public booleangetDialog()
get whether sheet is a dialog sheet or not

return
isDialog or not

        return ((WSBoolRecord) sheet.findFirstRecordBySid(WSBoolRecord.sid))
                .getDialog();
    
public booleangetDisplayGuts()
get whether to display the guts or not

return
guts or no guts (or glory)

        return ((WSBoolRecord) sheet.findFirstRecordBySid(WSBoolRecord.sid))
                .getDisplayGuts();
    
public intgetFirstRowNum()
gets the first row on the sheet

return
the number of the first logical row on the sheet

        return firstrow;
    
public booleangetFitToPage()
fit to page option is on

return
fit or not

        return ((WSBoolRecord) sheet.findFirstRecordBySid(WSBoolRecord.sid))
                .getFitToPage();
    
public org.apache.poi.hssf.usermodel.HSSFFootergetFooter()
Gets the user model for the document footer.

return
The Document footer.

        return new HSSFFooter( getSheet().getFooter() );
    
public org.apache.poi.hssf.usermodel.HSSFHeadergetHeader()
Gets the user model for the document header.

return
The Document header.

        return new HSSFHeader( getSheet().getHeader() );
    
public booleangetHorizontallyCenter()
Determine whether printed output for this sheet will be horizontally centered.

        HCenterRecord record =
                (HCenterRecord) sheet.findFirstRecordBySid(HCenterRecord.sid);

        return record.getHCenter();
    
public intgetLastRowNum()
gets the last row on the sheet

return
last row contained n this sheet.

        return lastrow;
    
public shortgetLeftCol()
The left col in the visible view when the sheet is first viewed after opening it in a viewer

return
short indicating the rownum (0 based) of the top row

    	return sheet.getLeftCol();
    
public doublegetMargin(short margin)
Gets the size of the margin in inches.

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

        return getSheet().getMargin( margin );
    
public org.apache.poi.hssf.util.RegiongetMergedRegionAt(int index)
gets the region at a particular index

param
index of the region to fetch
return
the merged region (simple eh?)

        return new Region(sheet.getMergedRegionAt(index));
    
public intgetNumMergedRegions()
returns the number of merged regions

return
number of merged regions

        return sheet.getNumMergedRegions();
    
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.

      return getSheet().getPaneInformation();
    
public intgetPhysicalNumberOfRows()
Returns the number of phsyically defined rows (NOT the number of rows in the sheet)

        return rows.size();
    
public org.apache.poi.hssf.usermodel.HSSFPrintSetupgetPrintSetup()
Gets the print setup object.

return
The user model for the print setup object.

        return new HSSFPrintSetup( getSheet().getPrintSetup() );
    
public booleangetProtect()
Answer whether protection is enabled or disabled

return
true => protection enabled; false => protection disabled

		return getSheet().getProtect().getProtect();
	
public org.apache.poi.hssf.usermodel.HSSFRowgetRow(int rownum)
Returns the logical row (not physical) 0-based. If you ask for a row that is not defined you get a null. This is to say row 4 represents the fifth row on a sheet.

param
rownum row to get
return
HSSFRow representing the rownumber or null if its not defined on the sheet

        HSSFRow row = new HSSFRow();

        //row.setRowNum((short) rownum);
        row.setRowNum( rownum);
        return (HSSFRow) rows.get(row);
    
public int[]getRowBreaks()
Retrieves all the horizontal page breaks

return
all the horizontal page breaks, or null if there are no row page breaks

    	//we can probably cache this information, but this should be a sparsely used function
    	int count = sheet.getNumRowBreaks();
    	if (count > 0) {
    	  int[] returnValue = new int[count];
    	  Iterator iterator = sheet.getRowBreaks();
    	  int i = 0;
    	  while (iterator.hasNext()) {
    		PageBreakRecord.Break breakItem = (PageBreakRecord.Break)iterator.next();
    		returnValue[i++] = (int)breakItem.main;
    	  }
    	  return returnValue;
    	}
    	return null;
    
public booleangetRowSumsBelow()
get if row summaries appear below detail in the outline

return
below or not

        return ((WSBoolRecord) sheet.findFirstRecordBySid(WSBoolRecord.sid))
                .getRowSumsBelow();
    
public booleangetRowSumsRight()
get if col summaries appear right of the detail in the outline

return
right or not

        return ((WSBoolRecord) sheet.findFirstRecordBySid(WSBoolRecord.sid))
                .getRowSumsRight();
    
protected org.apache.poi.hssf.model.SheetgetSheet()
used internally in the API to get the low level Sheet record represented by this Object.

return
Sheet - low level representation of this HSSFSheet.

        return sheet;
    
public shortgetTopRow()
The top row in the visible view when the sheet is first viewed after opening it in a viewer

return
short indicating the rownum (0 based) of the top row

    	return sheet.getTopRow();
    
public booleangetVerticallyCenter(boolean value)
Determine whether printed output for this sheet will be vertically centered.

        VCenterRecord record =
                (VCenterRecord) sheet.findFirstRecordBySid(VCenterRecord.sid);

        return record.getVCenter();
    
public voidgroupColumn(short fromColumn, short toColumn)
Create an outline for the provided column range.

param
fromColumn beginning of the column range.
param
toColumn end of the column range.

        sheet.groupColumnRange( fromColumn, toColumn, true );
    
public voidgroupRow(int fromRow, int toRow)

        sheet.groupRowRange( fromRow, toRow, true );
    
protected voidinsertChartRecords(java.util.List records)

        int window2Loc = sheet.findFirstRecordLocBySid( WindowTwoRecord.sid );
        sheet.getRecords().addAll( window2Loc, records );
    
public booleanisColumnBroken(short column)
Determines if there is a page break at the indicated column

param
column FIXME: Document this!
return
FIXME: Document this!

    	return sheet.isColumnBroken(column);
    
public booleanisColumnHidden(short column)
Get the hidden state for a given column.

param
column - the column to set (0-based)
return
hidden - the visiblity state of the column

        return sheet.isColumnHidden(column);
    
public booleanisDisplayFormulas()
Returns if formulas are displayed.

return
whether formulas are displayed

    	return sheet.isDisplayFormulas();
    
public booleanisDisplayGridlines()
Returns if gridlines are displayed.

return
whether gridlines are displayed

	return sheet.isDisplayGridlines();
    
public booleanisDisplayRowColHeadings()
Returns if RowColHeadings are displayed.

return
whether RowColHeadings are displayed

    	return sheet.isDisplayRowColHeadings();
    
public booleanisGridsPrinted()
get whether gridlines are printed.

return
true if printed

        return sheet.isGridsPrinted();
    
public booleanisPrintGridlines()
Returns whether gridlines are printed.

return
Gridlines are printed

        return getSheet().getPrintGridlines().getPrintGridlines();
    
public booleanisRowBroken(int row)
Determines if there is a page break at the indicated row

param
row FIXME: Document this!
return
FIXME: Document this!

    	return sheet.isRowBroken(row);
    
public voidremoveColumnBreak(short column)
Removes a page break at the indicated column

param
column

    	sheet.removeColumnBreak(column);
    
public voidremoveMergedRegion(int index)
removes a merged region of cells (hence letting them free)

param
index of the region to unmerge

        sheet.removeMergedRegion(index);
    
public voidremoveRow(org.apache.poi.hssf.usermodel.HSSFRow row)
Remove a row from this sheet. All cells contained in the row are removed as well

param
row representing a row to remove.

        sheet.setLoc(sheet.getDimsLoc());
        if (rows.size() > 0)
        {
            rows.remove(row);
            if (row.getRowNum() == getLastRowNum())
            {
                lastrow = findLastRow(lastrow);
            }
            if (row.getRowNum() == getFirstRowNum())
            {
                firstrow = findFirstRow(firstrow);
            }
            Iterator iter = row.cellIterator();

            while (iter.hasNext())
            {
                HSSFCell cell = (HSSFCell) iter.next();

                sheet.removeValueRecord(row.getRowNum(),
                        cell.getCellValueRecord());
            }
            sheet.removeRow(row.getRowRecord());
        }
    
public voidremoveRowBreak(int row)
Removes the page break at the indicated row

param
row

    	sheet.removeRowBreak(row);
    
public java.util.IteratorrowIterator()

return
an iterator of the PHYSICAL rows. Meaning the 3rd element may not be the third row if say for instance the second row is undefined.

        return rows.values().iterator();
    
public voidsetAlternativeExpression(boolean b)
whether alternate expression evaluation is on

param
b alternative expression evaluation or not

        WSBoolRecord record =
                (WSBoolRecord) sheet.findFirstRecordBySid(WSBoolRecord.sid);

        record.setAlternateExpression(b);
    
public voidsetAlternativeFormula(boolean b)
whether alternative formula entry is on

param
b alternative formulas or not

        WSBoolRecord record =
                (WSBoolRecord) sheet.findFirstRecordBySid(WSBoolRecord.sid);

        record.setAlternateFormula(b);
    
public voidsetAutobreaks(boolean b)
show automatic page breaks or not

param
b whether to show auto page breaks

        WSBoolRecord record =
                (WSBoolRecord) sheet.findFirstRecordBySid(WSBoolRecord.sid);

        record.setAutobreaks(b);
    
public voidsetColumnBreak(short column)
Sets a page break at the indicated column

param
column

    	validateColumn(column);
    	sheet.setColumnBreak(column, (short)0, (short)65535);
    
public voidsetColumnGroupCollapsed(short columnNumber, boolean collapsed)
Expands or collapses a column group.

param
columnNumber One of the columns in the group.
param
collapsed true = collapse group, false = expand group.

        sheet.setColumnGroupCollapsed( columnNumber, collapsed );
    
public voidsetColumnHidden(short column, boolean hidden)
Get the visibility state for a given column.

param
column - the column to get (0-based)
param
width - the visiblity state of the column

        sheet.setColumnHidden(column, hidden);
    
public voidsetColumnWidth(short column, short width)
set the width (in units of 1/256th of a character width)

param
column - the column to set (0-based)
param
width - the width in units of 1/256th of a character width

        sheet.setColumnWidth(column, width);
    
public voidsetDefaultColumnStyle(short column, org.apache.poi.hssf.usermodel.HSSFCellStyle style)
Sets the default column style for a given column. POI will only apply this style to new cells added to the sheet.

param
fromCol the starting column index
param
column the column index

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

param
width default column width

        sheet.setDefaultColumnWidth(width);
    
public voidsetDefaultRowHeight(short height)
set the default row height for the sheet (if the rows do not define their own height) in twips (1/20 of a point)

param
height default row height

        sheet.setDefaultRowHeight(height);
    
public voidsetDefaultRowHeightInPoints(float height)
set the default row height for the sheet (if the rows do not define their own height) in points

param
height default row height

        sheet.setDefaultRowHeight((short) (height * 20));
    
public voidsetDialog(boolean b)
set whether sheet is a dialog sheet or not

param
b isDialog or not

        WSBoolRecord record =
                (WSBoolRecord) sheet.findFirstRecordBySid(WSBoolRecord.sid);

        record.setDialog(b);
    
public voidsetDisplayFormulas(boolean show)
Sets whether the formulas are shown in a viewer.

param
show whether to show formulas or not

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

param
show whether to show gridlines or not

        sheet.setDisplayGridlines(show);
    
public voidsetDisplayGuts(boolean b)
set whether to display the guts or not

param
b guts or no guts (or glory)

        WSBoolRecord record =
                (WSBoolRecord) sheet.findFirstRecordBySid(WSBoolRecord.sid);

        record.setDisplayGuts(b);
    
public voidsetDisplayRowColHeadings(boolean show)
Sets whether the RowColHeadings are shown in a viewer.

param
show whether to show RowColHeadings or not

        sheet.setDisplayRowColHeadings(show);
    
public voidsetFitToPage(boolean b)
fit to page option is on

param
b fit or not

        WSBoolRecord record =
                (WSBoolRecord) sheet.findFirstRecordBySid(WSBoolRecord.sid);

        record.setFitToPage(b);
    
public voidsetGridsPrinted(boolean value)
set whether gridlines printed.

param
value false if not printed.

        sheet.setGridsPrinted(value);
    
public voidsetHorizontallyCenter(boolean value)
determines whether the output is horizontally centered on the page.

param
value true to horizontally center, false otherwise.

        HCenterRecord record =
                (HCenterRecord) sheet.findFirstRecordBySid(HCenterRecord.sid);

        record.setHCenter(value);
    
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

        getSheet().setMargin( margin, size );
    
public voidsetPrintGridlines(boolean newPrintGridlines)
Turns on or off the printing of gridlines.

param
newPrintGridlines boolean to turn on or off the printing of gridlines

        getSheet().getPrintGridlines().setPrintGridlines( newPrintGridlines );
    
private voidsetPropertiesFromSheet(org.apache.poi.hssf.model.Sheet sheet)
used internally to set the properties given a Sheet object

        int sloc = sheet.getLoc();
        RowRecord row = sheet.getNextRow();

        while (row != null)
        {
            createRowFromRecord(row);

            row = sheet.getNextRow();
        }
        sheet.setLoc(sloc);
        CellValueRecordInterface cval = sheet.getNextValueRecord();
        long timestart = System.currentTimeMillis();

        if (log.check( POILogger.DEBUG ))
            log.log(DEBUG, "Time at start of cell creating in HSSF sheet = ",
                new Long(timestart));
        HSSFRow lastrow = null;

        while (cval != null)
        {
            long cellstart = System.currentTimeMillis();
            HSSFRow hrow = lastrow;

            if ( ( lastrow == null ) || ( lastrow.getRowNum() != cval.getRow() ) )
            {
                hrow = getRow( cval.getRow() );
            }
            if ( hrow != null )
            {
                lastrow = hrow;
                if (log.check( POILogger.DEBUG ))
                    log.log( DEBUG, "record id = " + Integer.toHexString( ( (Record) cval ).getSid() ) );
                hrow.createCellFromRecord( cval );
                cval = sheet.getNextValueRecord();
                if (log.check( POILogger.DEBUG ))
                    log.log( DEBUG, "record took ",
                        new Long( System.currentTimeMillis() - cellstart ) );
            }
            else
            {
                cval = null;
            }
        }
        if (log.check( POILogger.DEBUG ))
            log.log(DEBUG, "total sheet cell creation took ",
                new Long(System.currentTimeMillis() - timestart));
    
public voidsetProtect(boolean protect)
Sets the protection on enabled or disabled

param
protect true => protection enabled; false => protection disabled

		getSheet().getProtect().setProtect(protect);
	
public voidsetRowBreak(int row)
Sets a page break at the indicated row

param
row FIXME: Document this!

    	validateRow(row);
    	sheet.setRowBreak(row, (short)0, (short)255);
    
public voidsetRowGroupCollapsed(int row, boolean collapse)

        sheet.setRowGroupCollapsed( row, collapse );
    
public voidsetRowSumsBelow(boolean b)
set if row summaries appear below detail in the outline

param
b below or not

        WSBoolRecord record =
                (WSBoolRecord) sheet.findFirstRecordBySid(WSBoolRecord.sid);

        record.setRowSumsBelow(b);
    
public voidsetRowSumsRight(boolean b)
set if col summaries appear right of the detail in the outline

param
b right or not

        WSBoolRecord record =
                (WSBoolRecord) sheet.findFirstRecordBySid(WSBoolRecord.sid);

        record.setRowSumsRight(b);
    
public voidsetSelected(boolean sel)
Sets whether sheet is selected.

param
sel Whether to select the sheet or deselect the sheet.

        getSheet().setSelected( sel );
    
public voidsetVerticallyCenter(boolean value)
determines whether the output is vertically centered on the page.

param
value true to vertically center, false otherwise.

        VCenterRecord record =
                (VCenterRecord) sheet.findFirstRecordBySid(VCenterRecord.sid);

        record.setVCenter(value);
    
public voidsetZoom(int numerator, int denominator)
Sets the zoom magnication for the sheet. The zoom is expressed as a fraction. For example to express a zoom of 75% use 3 for the numerator and 4 for the denominator.

param
numerator The numerator for the zoom magnification.
param
denominator The denominator for the zoom magnification.

        if (numerator < 1 || numerator > 65535)
            throw new IllegalArgumentException("Numerator must be greater than 1 and less than 65536");
        if (denominator < 1 || denominator > 65535)
            throw new IllegalArgumentException("Denominator must be greater than 1 and less than 65536");

        SCLRecord sclRecord = new SCLRecord();
        sclRecord.setNumerator((short)numerator);
        sclRecord.setDenominator((short)denominator);
        getSheet().setSCLRecord(sclRecord);
    
protected voidshiftMerged(int startRow, int endRow, int n, boolean isRow)
Shifts the merged regions left or right depending on mode

TODO: MODE , this is only row specific

param
startRow
param
endRow
param
n
param
isRow

		List shiftedRegions = new ArrayList();
		//move merged regions completely if they fall within the new region boundaries when they are shifted
		for (int i = 0; i < this.getNumMergedRegions(); i++) {
			 Region merged = this.getMergedRegionAt(i);

			 boolean inStart = (merged.getRowFrom() >= startRow || merged.getRowTo() >= startRow);
			 boolean inEnd =  (merged.getRowTo() <= endRow || merged.getRowFrom() <= endRow);

			 //dont check if it's not within the shifted area
			 if (! (inStart && inEnd)) continue;

			 //only shift if the region outside the shifted rows is not merged too
			 if (!merged.contains(startRow-1, (short)0) && !merged.contains(endRow+1, (short)0)){
				 merged.setRowFrom(merged.getRowFrom()+n);
				 merged.setRowTo(merged.getRowTo()+n);
				 //have to remove/add it back
				 shiftedRegions.add(merged);
				 this.removeMergedRegion(i);
				 i = i -1; // we have to back up now since we removed one

			 }

		}

		//readd so it doesn't get shifted again
		Iterator iterator = shiftedRegions.iterator();
		while (iterator.hasNext()) {
			Region region = (Region)iterator.next();

			this.addMergedRegion(region);
		}

	
public voidshiftRows(int startRow, int endRow, int n)
Shifts rows between startRow and endRow n number of rows. If you use a negative number, it will shift rows up. Code ensures that rows don't wrap around. Calls shiftRows(startRow, endRow, n, false, false);

Additionally shifts merged regions that are completely defined in these rows (ie. merged 2 cells on a row to be shifted).

param
startRow the row to start shifting
param
endRow the row to end shifting
param
n the number of rows to shift

		shiftRows(startRow, endRow, n, false, false);
    
public voidshiftRows(int startRow, int endRow, int n, boolean copyRowHeight, boolean resetOriginalRowHeight)
Shifts rows between startRow and endRow n number of rows. If you use a negative number, it will shift rows up. Code ensures that rows don't wrap around

Additionally shifts merged regions that are completely defined in these rows (ie. merged 2 cells on a row to be shifted).

TODO Might want to add bounds checking here

param
startRow the row to start shifting
param
endRow the row to end shifting
param
n the number of rows to shift
param
copyRowHeight whether to copy the row height during the shift
param
resetOriginalRowHeight whether to set the original row's height to the default

        int s, e, inc;
        if ( n < 0 )
        {
            s = startRow;
            e = endRow;
            inc = 1;
        }
        else
        {
            s = endRow;
            e = startRow;
            inc = -1;
        }

        shiftMerged(startRow, endRow, n, true);
        sheet.shiftRowBreaks(startRow, endRow, n);
			
        for ( int rowNum = s; rowNum >= startRow && rowNum <= endRow && rowNum >= 0 && rowNum < 65536; rowNum += inc )
        {
            HSSFRow row = getRow( rowNum );
            HSSFRow row2Replace = getRow( rowNum + n );
            if ( row2Replace == null )
                row2Replace = createRow( rowNum + n );

            HSSFCell cell;




	    // Removes the cells before over writting them.
            for ( short col = row2Replace.getFirstCellNum(); col <= row2Replace.getLastCellNum(); col++ )
            {
                cell = row2Replace.getCell( col );
                if ( cell != null )
                    row2Replace.removeCell( cell );
            }
	    if (row == null) continue; // Nothing to do for this row
	    else {
		if (copyRowHeight) {
		    row2Replace.setHeight(row.getHeight());
		}

		if (resetOriginalRowHeight) {
		    row.setHeight((short)0xff);
		}
	    }
            for ( short col = row.getFirstCellNum(); col <= row.getLastCellNum(); col++ )
            {
                cell = row.getCell( col );
                if ( cell != null )
                {
                    row.removeCell( cell );
                    CellValueRecordInterface cellRecord = cell.getCellValueRecord();
                    cellRecord.setRow( rowNum + n );
                    row2Replace.createCellFromRecord( cellRecord );
                    sheet.addValueRecord( rowNum + n, cellRecord );
                }
            }
        }
        if ( endRow == lastrow || endRow + n > lastrow ) lastrow = Math.min( endRow + n, 65535 );
        if ( startRow == firstrow || startRow + n < firstrow ) firstrow = Math.max( startRow + n, 0 );
    
public voidshowInPane(short toprow, short leftcol)
Sets desktop window pane display area, when the file is first opened in a viewer.

param
toprow the top row to show in desktop window pane
param
leftcol the left column to show in desktop window pane

        this.sheet.setTopRow((short)toprow);
        this.sheet.setLeftCol((short)leftcol);
        
public voidungroupColumn(short fromColumn, short toColumn)

        sheet.groupColumnRange( fromColumn, toColumn, false );
    
public voidungroupRow(int fromRow, int toRow)

        sheet.groupRowRange( fromRow, toRow, false );
    
protected voidvalidateColumn(short column)
Runs a bounds check for column numbers

param
column

    	if (column > 255) throw new IllegalArgumentException("Maximum column number is 255");
    	if (column < 0)	throw new IllegalArgumentException("Minimum column number is 0");
    
protected voidvalidateRow(int row)
Runs a bounds check for row numbers

param
row

    	if (row > 65535) throw new IllegalArgumentException("Maximum row number is 65535");
    	if (row < 0) throw new IllegalArgumentException("Minumum row number is 0");