code refactoring

git-svn-id: https://svn.apache.org/repos/asf/poi/branches/gsoc2012@1368211 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Evgeniy Berlog 2012-08-01 19:34:08 +00:00
parent 462647cd42
commit b04e0e9381
5 changed files with 488 additions and 407 deletions

View File

@ -1482,6 +1482,7 @@ public final class InternalSheet {
* if none currently exist * if none currently exist
* @param drawingManager The DrawingManager2 for our workbook * @param drawingManager The DrawingManager2 for our workbook
* @param createIfMissing Should one be created if missing? * @param createIfMissing Should one be created if missing?
* @return location of EscherAggregate record. if no EscherAggregate record is found return -1
*/ */
public int aggregateDrawingRecords(DrawingManager2 drawingManager, boolean createIfMissing) { public int aggregateDrawingRecords(DrawingManager2 drawingManager, boolean createIfMissing) {
int loc = findFirstRecordLocBySid(DrawingRecord.sid); int loc = findFirstRecordLocBySid(DrawingRecord.sid);

View File

@ -539,14 +539,18 @@ public final class EscherAggregate extends AbstractEscherHolderRecord {
//First record in drawing layer MUST be DrawingRecord //First record in drawing layer MUST be DrawingRecord
if (writtenEscherBytes + drawingData.length > RecordInputStream.MAX_RECORD_DATA_SIZE && i != 1) { if (writtenEscherBytes + drawingData.length > RecordInputStream.MAX_RECORD_DATA_SIZE && i != 1) {
for (int j = 0; j < drawingData.length; j += RecordInputStream.MAX_RECORD_DATA_SIZE) { for (int j = 0; j < drawingData.length; j += RecordInputStream.MAX_RECORD_DATA_SIZE) {
ContinueRecord drawing = new ContinueRecord(Arrays.copyOfRange(drawingData, j, Math.min(j + RecordInputStream.MAX_RECORD_DATA_SIZE, drawingData.length))); byte[] buf = new byte[Math.min(RecordInputStream.MAX_RECORD_DATA_SIZE, drawingData.length - j)];
System.arraycopy(drawingData, j, buf, 0, Math.min(RecordInputStream.MAX_RECORD_DATA_SIZE, drawingData.length - j));
ContinueRecord drawing = new ContinueRecord(buf);
temp += drawing.serialize(pos + temp, data); temp += drawing.serialize(pos + temp, data);
} }
} else { } else {
for (int j = 0; j < drawingData.length; j += RecordInputStream.MAX_RECORD_DATA_SIZE) { for (int j = 0; j < drawingData.length; j += RecordInputStream.MAX_RECORD_DATA_SIZE) {
if (j == 0) { if (j == 0) {
DrawingRecord drawing = new DrawingRecord(); DrawingRecord drawing = new DrawingRecord();
drawing.setData(Arrays.copyOfRange(drawingData, j, Math.min(j + RecordInputStream.MAX_RECORD_DATA_SIZE, drawingData.length))); byte[] buf = new byte[Math.min(RecordInputStream.MAX_RECORD_DATA_SIZE, drawingData.length - j)];
System.arraycopy(drawingData, j, buf, 0, Math.min(RecordInputStream.MAX_RECORD_DATA_SIZE, drawingData.length - j));
drawing.setData(buf);
temp += drawing.serialize(pos + temp, data); temp += drawing.serialize(pos + temp, data);
} else { } else {
ContinueRecord drawing = new ContinueRecord(Arrays.copyOfRange(drawingData, j, Math.min(j + RecordInputStream.MAX_RECORD_DATA_SIZE, drawingData.length))); ContinueRecord drawing = new ContinueRecord(Arrays.copyOfRange(drawingData, j, Math.min(j + RecordInputStream.MAX_RECORD_DATA_SIZE, drawingData.length)));

View File

@ -51,4 +51,6 @@ public interface HSSFShapeContainer extends Iterable<HSSFShape>
public int getX2(); public int getX2();
public int getY2(); public int getY2();
public boolean removeShape(HSSFShape shape);
} }

View File

@ -24,6 +24,7 @@ import java.util.List;
import java.util.TreeMap; import java.util.TreeMap;
import org.apache.poi.ddf.EscherRecord; import org.apache.poi.ddf.EscherRecord;
import org.apache.poi.hssf.model.DrawingManager2;
import org.apache.poi.hssf.model.HSSFFormulaParser; import org.apache.poi.hssf.model.HSSFFormulaParser;
import org.apache.poi.hssf.model.InternalSheet; import org.apache.poi.hssf.model.InternalSheet;
import org.apache.poi.hssf.model.InternalWorkbook; import org.apache.poi.hssf.model.InternalWorkbook;
@ -52,6 +53,7 @@ import org.apache.poi.util.POILogger;
/** /**
* High level representation of a worksheet. * High level representation of a worksheet.
*
* @author Andrew C. Oliver (acoliver at apache dot org) * @author Andrew C. Oliver (acoliver at apache dot org)
* @author Glen Stampoultzis (glens at apache.org) * @author Glen Stampoultzis (glens at apache.org)
* @author Libin Roman (romal at vistaportal.com) * @author Libin Roman (romal at vistaportal.com)
@ -76,7 +78,9 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
* reference to the low level {@link InternalSheet} object * reference to the low level {@link InternalSheet} object
*/ */
private final InternalSheet _sheet; private final InternalSheet _sheet;
/** stores rows by zero-based row number */ /**
* stores rows by zero-based row number
*/
private final TreeMap<Integer, HSSFRow> _rows; private final TreeMap<Integer, HSSFRow> _rows;
protected final InternalWorkbook _book; protected final InternalWorkbook _book;
protected final HSSFWorkbook _workbook; protected final HSSFWorkbook _workbook;
@ -205,8 +209,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
* @see org.apache.poi.hssf.usermodel.HSSFRow * @see org.apache.poi.hssf.usermodel.HSSFRow
* @see #removeRow(org.apache.poi.ss.usermodel.Row) * @see #removeRow(org.apache.poi.ss.usermodel.Row)
*/ */
public HSSFRow createRow(int rownum) public HSSFRow createRow(int rownum) {
{
HSSFRow row = new HSSFRow(_workbook, this, rownum); HSSFRow row = new HSSFRow(_workbook, this, rownum);
// new rows inherit default height from the sheet // new rows inherit default height from the sheet
row.setHeight(getDefaultRowHeight()); row.setHeight(getDefaultRowHeight());
@ -218,12 +221,12 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Used internally to create a high level Row object from a low level row object. * Used internally to create a high level Row object from a low level row object.
* USed when reading an existing file * USed when reading an existing file
*
* @param row low level record to represent as a high level Row and add to sheet * @param row low level record to represent as a high level Row and add to sheet
* @return HSSFRow high level representation * @return HSSFRow high level representation
*/ */
private HSSFRow createRowFromRecord(RowRecord row) private HSSFRow createRowFromRecord(RowRecord row) {
{
HSSFRow hrow = new HSSFRow(_workbook, this, row); HSSFRow hrow = new HSSFRow(_workbook, this, row);
addRow(hrow, false); addRow(hrow, false);
@ -255,12 +258,10 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
//should not happen if the input argument is valid //should not happen if the input argument is valid
throw new IllegalArgumentException("Specified row does not belong to this sheet"); throw new IllegalArgumentException("Specified row does not belong to this sheet");
} }
if (hrow.getRowNum() == getLastRowNum()) if (hrow.getRowNum() == getLastRowNum()) {
{
_lastrow = findLastRow(_lastrow); _lastrow = findLastRow(_lastrow);
} }
if (hrow.getRowNum() == getFirstRowNum()) if (hrow.getRowNum() == getFirstRowNum()) {
{
_firstrow = findFirstRow(_firstrow); _firstrow = findFirstRow(_firstrow);
} }
_sheet.removeRow(hrow.getRowRecord()); _sheet.removeRow(hrow.getRowRecord());
@ -290,13 +291,11 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
* used internally to refresh the "first row" when the first row is removed. * used internally to refresh the "first row" when the first row is removed.
*/ */
private int findFirstRow(int firstrow) private int findFirstRow(int firstrow) {
{
int rownum = firstrow + 1; int rownum = firstrow + 1;
HSSFRow r = getRow(rownum); HSSFRow r = getRow(rownum);
while (r == null && rownum <= getLastRowNum()) while (r == null && rownum <= getLastRowNum()) {
{
r = getRow(++rownum); r = getRow(++rownum);
} }
@ -312,20 +311,16 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
* @param addLow whether to add the row to the low level model - false if its already there * @param addLow whether to add the row to the low level model - false if its already there
*/ */
private void addRow(HSSFRow row, boolean addLow) private void addRow(HSSFRow row, boolean addLow) {
{
_rows.put(Integer.valueOf(row.getRowNum()), row); _rows.put(Integer.valueOf(row.getRowNum()), row);
if (addLow) if (addLow) {
{
_sheet.addRow(row.getRowRecord()); _sheet.addRow(row.getRowRecord());
} }
boolean firstRow = _rows.size() == 1; boolean firstRow = _rows.size() == 1;
if (row.getRowNum() > getLastRowNum() || firstRow) if (row.getRowNum() > getLastRowNum() || firstRow) {
{
_lastrow = row.getRowNum(); _lastrow = row.getRowNum();
} }
if (row.getRowNum() < getFirstRowNum() || firstRow) if (row.getRowNum() < getFirstRowNum() || firstRow) {
{
_firstrow = row.getRowNum(); _firstrow = row.getRowNum();
} }
} }
@ -333,6 +328,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Returns the logical row (not physical) 0-based. If you ask for a row that is not * 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. * defined you get a null. This is to say row 4 represents the fifth row on a sheet.
*
* @param rowIndex row to get * @param rowIndex row to get
* @return HSSFRow representing the row number or null if its not defined on the sheet * @return HSSFRow representing the row number or null if its not defined on the sheet
*/ */
@ -349,6 +345,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Gets the first row on the sheet * Gets the first row on the sheet
*
* @return the number of the first logical row on the sheet, zero based * @return the number of the first logical row on the sheet, zero based
*/ */
public int getFirstRowNum() { public int getFirstRowNum() {
@ -365,6 +362,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
* call {@link #getPhysicalNumberOfRows()} to * call {@link #getPhysicalNumberOfRows()} to
* tell if there is a row at position zero * tell if there is a row at position zero
* or not. * or not.
*
* @return the number of the last row contained in this sheet, zero based. * @return the number of the last row contained in this sheet, zero based.
*/ */
public int getLastRowNum() { public int getLastRowNum() {
@ -424,6 +422,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Get the visibility state for a given column. * Get the visibility state for a given column.
*
* @param columnIndex - the column to get (0-based) * @param columnIndex - the column to get (0-based)
* @param hidden - the visiblity state of the column * @param hidden - the visiblity state of the column
*/ */
@ -433,6 +432,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Get the hidden state for a given column. * Get the hidden state for a given column.
*
* @param columnIndex - the column to set (0-based) * @param columnIndex - the column to set (0-based)
* @return hidden - <code>false</code> if the column is visible * @return hidden - <code>false</code> if the column is visible
*/ */
@ -442,13 +442,13 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Set the width (in units of 1/256th of a character width) * Set the width (in units of 1/256th of a character width)
* * <p/>
* <p> * <p>
* The maximum column width for an individual cell is 255 characters. * The maximum column width for an individual cell is 255 characters.
* This value represents the number of characters that can be displayed * This value represents the number of characters that can be displayed
* in a cell that is formatted with the standard font (first font in the workbook). * in a cell that is formatted with the standard font (first font in the workbook).
* </p> * </p>
* * <p/>
* <p> * <p>
* Character width is defined as the maximum digit width * Character width is defined as the maximum digit width
* of the numbers <code>0, 1, 2, ... 9</code> as rendered * of the numbers <code>0, 1, 2, ... 9</code> as rendered
@ -457,7 +457,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
* Unless you are using a very special font, the default character is '0' (zero), * Unless you are using a very special font, the default character is '0' (zero),
* this is true for Arial (default font font in HSSF) and Calibri (default font in XSSF) * this is true for Arial (default font font in HSSF) and Calibri (default font in XSSF)
* </p> * </p>
* * <p/>
* <p> * <p>
* Please note, that the width set by this method includes 4 pixels of margin padding (two on each side), * Please note, that the width set by this method includes 4 pixels of margin padding (two on each side),
* plus 1 pixel padding for the gridlines (Section 3.3.1.12 of the OOXML spec). * plus 1 pixel padding for the gridlines (Section 3.3.1.12 of the OOXML spec).
@ -475,9 +475,9 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
* If you set a column width to be eight characters wide, e.g. <code>setColumnWidth(columnIndex, 8*256)</code>, * If you set a column width to be eight characters wide, e.g. <code>setColumnWidth(columnIndex, 8*256)</code>,
* then the actual value of visible characters (the value shown in Excel) is derived from the following equation: * then the actual value of visible characters (the value shown in Excel) is derived from the following equation:
* <code> * <code>
Truncate([numChars*7+5]/7*256)/256 = 8; * Truncate([numChars*7+5]/7*256)/256 = 8;
* </code> * </code>
* * <p/>
* which gives <code>7.29</code>. * which gives <code>7.29</code>.
* *
* @param columnIndex - the column to set (0-based) * @param columnIndex - the column to set (0-based)
@ -490,6 +490,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* get the width (in units of 1/256th of a character width ) * get the width (in units of 1/256th of a character width )
*
* @param columnIndex - the column to set (0-based) * @param columnIndex - the column to set (0-based)
* @return width - the width in units of 1/256th of a character width * @return width - the width in units of 1/256th of a character width
*/ */
@ -500,14 +501,17 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* get the default column width for the sheet (if the columns do not define their own width) in * get the default column width for the sheet (if the columns do not define their own width) in
* characters * characters
*
* @return default column width * @return default column width
*/ */
public int getDefaultColumnWidth() { public int getDefaultColumnWidth() {
return _sheet.getDefaultColumnWidth(); return _sheet.getDefaultColumnWidth();
} }
/** /**
* set the default column width for the sheet (if the columns do not define their own width) in * set the default column width for the sheet (if the columns do not define their own width) in
* characters * characters
*
* @param width default column width * @param width default column width
*/ */
public void setDefaultColumnWidth(int width) { public void setDefaultColumnWidth(int width) {
@ -530,30 +534,29 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
* @return default row height in points * @return default row height in points
*/ */
public float getDefaultRowHeightInPoints() public float getDefaultRowHeightInPoints() {
{
return ((float) _sheet.getDefaultRowHeight() / 20); return ((float) _sheet.getDefaultRowHeight() / 20);
} }
/** /**
* set the default row height for the sheet (if the rows do not define their own height) in * set the default row height for the sheet (if the rows do not define their own height) in
* twips (1/20 of a point) * twips (1/20 of a point)
*
* @param height default row height * @param height default row height
*/ */
public void setDefaultRowHeight(short height) public void setDefaultRowHeight(short height) {
{
_sheet.setDefaultRowHeight(height); _sheet.setDefaultRowHeight(height);
} }
/** /**
* set the default row height for the sheet (if the rows do not define their own height) in * set the default row height for the sheet (if the rows do not define their own height) in
* points * points
*
* @param height default row height * @param height default row height
*/ */
public void setDefaultRowHeightInPoints(float height) public void setDefaultRowHeightInPoints(float height) {
{
_sheet.setDefaultRowHeight((short) (height * 20)); _sheet.setDefaultRowHeight((short) (height * 20));
} }
@ -576,42 +579,42 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* get whether gridlines are printed. * get whether gridlines are printed.
*
* @return true if printed * @return true if printed
*/ */
public boolean isGridsPrinted() public boolean isGridsPrinted() {
{
return _sheet.isGridsPrinted(); return _sheet.isGridsPrinted();
} }
/** /**
* set whether gridlines printed. * set whether gridlines printed.
*
* @param value false if not printed. * @param value false if not printed.
*/ */
public void setGridsPrinted(boolean value) public void setGridsPrinted(boolean value) {
{
_sheet.setGridsPrinted(value); _sheet.setGridsPrinted(value);
} }
/** /**
* @deprecated (Aug-2008) use <tt>CellRangeAddress</tt> instead of <tt>Region</tt> * @deprecated (Aug-2008) use <tt>CellRangeAddress</tt> instead of <tt>Region</tt>
*/ */
public int addMergedRegion(org.apache.poi.ss.util.Region region) public int addMergedRegion(org.apache.poi.ss.util.Region region) {
{
return _sheet.addMergedRegion(region.getRowFrom(), return _sheet.addMergedRegion(region.getRowFrom(),
region.getColumnFrom(), region.getColumnFrom(),
//(short) region.getRowTo(), //(short) region.getRowTo(),
region.getRowTo(), region.getRowTo(),
region.getColumnTo()); region.getColumnTo());
} }
/** /**
* adds a merged region of cells (hence those cells form one) * adds a merged region of cells (hence those cells form one)
*
* @param region (rowfrom/colfrom-rowto/colto) to merge * @param region (rowfrom/colfrom-rowto/colto) to merge
* @return index of this region * @return index of this region
*/ */
public int addMergedRegion(CellRangeAddress region) public int addMergedRegion(CellRangeAddress region) {
{
region.validate(SpreadsheetVersion.EXCEL97); region.validate(SpreadsheetVersion.EXCEL97);
// throw IllegalStateException if the argument CellRangeAddress intersects with // throw IllegalStateException if the argument CellRangeAddress intersects with
@ -655,50 +658,51 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Control if Excel should be asked to recalculate all formulas on this sheet * Control if Excel should be asked to recalculate all formulas on this sheet
* when the workbook is opened. * when the workbook is opened.
* * <p/>
* <p> * <p>
* Calculating the formula values with {@link org.apache.poi.ss.usermodel.FormulaEvaluator} is the * Calculating the formula values with {@link org.apache.poi.ss.usermodel.FormulaEvaluator} is the
* recommended solution, but this may be used for certain cases where * recommended solution, but this may be used for certain cases where
* evaluation in POI is not possible. * evaluation in POI is not possible.
* </p> * </p>
* * <p/>
* <p> * <p>
* It is recommended to force recalcuation of formulas on workbook level using * It is recommended to force recalcuation of formulas on workbook level using
* {@link org.apache.poi.ss.usermodel.Workbook#setForceFormulaRecalculation(boolean)} * {@link org.apache.poi.ss.usermodel.Workbook#setForceFormulaRecalculation(boolean)}
* to ensure that all cross-worksheet formuals and external dependencies are updated. * to ensure that all cross-worksheet formuals and external dependencies are updated.
* </p> * </p>
*
* @param value true if the application will perform a full recalculation of * @param value true if the application will perform a full recalculation of
* this worksheet values when the workbook is opened * this worksheet values when the workbook is opened
*
* @see org.apache.poi.ss.usermodel.Workbook#setForceFormulaRecalculation(boolean) * @see org.apache.poi.ss.usermodel.Workbook#setForceFormulaRecalculation(boolean)
*/ */
public void setForceFormulaRecalculation(boolean value) public void setForceFormulaRecalculation(boolean value) {
{
_sheet.setUncalced(value); _sheet.setUncalced(value);
} }
/** /**
* Whether a record must be inserted or not at generation to indicate that * Whether a record must be inserted or not at generation to indicate that
* formula must be recalculated when workbook is opened. * formula must be recalculated when workbook is opened.
*
* @return true if an uncalced record must be inserted or not at generation * @return true if an uncalced record must be inserted or not at generation
*/ */
public boolean getForceFormulaRecalculation() public boolean getForceFormulaRecalculation() {
{
return _sheet.getUncalced(); return _sheet.getUncalced();
} }
/** /**
* determines whether the output is vertically centered on the page. * determines whether the output is vertically centered on the page.
*
* @param value true to vertically center, false otherwise. * @param value true to vertically center, false otherwise.
*/ */
public void setVerticallyCenter(boolean value) public void setVerticallyCenter(boolean value) {
{
_sheet.getPageSettings().getVCenter().setVCenter(value); _sheet.getPageSettings().getVCenter().setVCenter(value);
} }
/** /**
* TODO: Boolean not needed, remove after next release * TODO: Boolean not needed, remove after next release
*
* @deprecated (Mar-2008) use getVerticallyCenter() instead * @deprecated (Mar-2008) use getVerticallyCenter() instead
*/ */
public boolean getVerticallyCenter(boolean value) { public boolean getVerticallyCenter(boolean value) {
@ -708,18 +712,17 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Determine whether printed output for this sheet will be vertically centered. * Determine whether printed output for this sheet will be vertically centered.
*/ */
public boolean getVerticallyCenter() public boolean getVerticallyCenter() {
{
return _sheet.getPageSettings().getVCenter().getVCenter(); return _sheet.getPageSettings().getVCenter().getVCenter();
} }
/** /**
* determines whether the output is horizontally centered on the page. * determines whether the output is horizontally centered on the page.
*
* @param value true to horizontally center, false otherwise. * @param value true to horizontally center, false otherwise.
*/ */
public void setHorizontallyCenter(boolean value) public void setHorizontallyCenter(boolean value) {
{
_sheet.getPageSettings().getHCenter().setHCenter(value); _sheet.getPageSettings().getHCenter().setHCenter(value);
} }
@ -727,8 +730,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
* Determine whether printed output for this sheet will be horizontally centered. * Determine whether printed output for this sheet will be horizontally centered.
*/ */
public boolean getHorizontallyCenter() public boolean getHorizontallyCenter() {
{
return _sheet.getPageSettings().getHCenter().getHCenter(); return _sheet.getPageSettings().getHCenter().getHCenter();
} }
@ -738,8 +740,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
* *
* @param value true for right to left, false otherwise. * @param value true for right to left, false otherwise.
*/ */
public void setRightToLeft(boolean value) public void setRightToLeft(boolean value) {
{
_sheet.getWindowTwo().setArabic(value); _sheet.getWindowTwo().setArabic(value);
} }
@ -748,28 +749,27 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
* *
* @return whether the text is displayed in right-to-left mode in the window * @return whether the text is displayed in right-to-left mode in the window
*/ */
public boolean isRightToLeft() public boolean isRightToLeft() {
{
return _sheet.getWindowTwo().getArabic(); return _sheet.getWindowTwo().getArabic();
} }
/** /**
* removes a merged region of cells (hence letting them free) * removes a merged region of cells (hence letting them free)
*
* @param index of the region to unmerge * @param index of the region to unmerge
*/ */
public void removeMergedRegion(int index) public void removeMergedRegion(int index) {
{
_sheet.removeMergedRegion(index); _sheet.removeMergedRegion(index);
} }
/** /**
* returns the number of merged regions * returns the number of merged regions
*
* @return number of merged regions * @return number of merged regions
*/ */
public int getNumMergedRegions() public int getNumMergedRegions() {
{
return _sheet.getNumMergedRegions(); return _sheet.getNumMergedRegions();
} }
@ -782,6 +782,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
return new org.apache.poi.hssf.util.Region(cra.getFirstRow(), (short) cra.getFirstColumn(), return new org.apache.poi.hssf.util.Region(cra.getFirstRow(), (short) cra.getFirstColumn(),
cra.getLastRow(), (short) cra.getLastColumn()); cra.getLastRow(), (short) cra.getLastColumn());
} }
/** /**
* @return the merged region at the specified index * @return the merged region at the specified index
*/ */
@ -799,6 +800,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
Iterator<Row> result = (Iterator<Row>) (Iterator<? extends Row>) _rows.values().iterator(); Iterator<Row> result = (Iterator<Row>) (Iterator<? extends Row>) _rows.values().iterator();
return result; return result;
} }
/** /**
* Alias for {@link #rowIterator()} to allow * Alias for {@link #rowIterator()} to allow
* foreach loops * foreach loops
@ -1041,26 +1043,32 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Note - this is not the same as whether the sheet is focused (isActive) * Note - this is not the same as whether the sheet is focused (isActive)
*
* @return <code>true</code> if this sheet is currently selected * @return <code>true</code> if this sheet is currently selected
*/ */
public boolean isSelected() { public boolean isSelected() {
return getSheet().getWindowTwo().getSelected(); return getSheet().getWindowTwo().getSelected();
} }
/** /**
* Sets whether sheet is selected. * Sets whether sheet is selected.
*
* @param sel Whether to select the sheet or deselect the sheet. * @param sel Whether to select the sheet or deselect the sheet.
*/ */
public void setSelected(boolean sel) { public void setSelected(boolean sel) {
getSheet().getWindowTwo().setSelected(sel); getSheet().getWindowTwo().setSelected(sel);
} }
/** /**
* @return <code>true</code> if this sheet is currently focused * @return <code>true</code> if this sheet is currently focused
*/ */
public boolean isActive() { public boolean isActive() {
return getSheet().getWindowTwo().isActive(); return getSheet().getWindowTwo().isActive();
} }
/** /**
* Sets whether sheet is selected. * Sets whether sheet is selected.
*
* @param sel Whether to select the sheet or deselect the sheet. * @param sel Whether to select the sheet or deselect the sheet.
*/ */
public void setActive(boolean sel) { public void setActive(boolean sel) {
@ -1069,6 +1077,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Gets the size of the margin in inches. * Gets the size of the margin in inches.
*
* @param margin which margin to get * @param margin which margin to get
* @return the size of the margin * @return the size of the margin
*/ */
@ -1085,6 +1094,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Sets the size of the margin in inches. * Sets the size of the margin in inches.
*
* @param margin which margin to get * @param margin which margin to get
* @param size the size of the margin * @param size the size of the margin
*/ */
@ -1104,8 +1114,10 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
private WorksheetProtectionBlock getProtectionBlock() { private WorksheetProtectionBlock getProtectionBlock() {
return _sheet.getProtectionBlock(); return _sheet.getProtectionBlock();
} }
/** /**
* Answer whether protection is enabled or disabled * Answer whether protection is enabled or disabled
*
* @return true => protection enabled; false => protection disabled * @return true => protection enabled; false => protection disabled
*/ */
public boolean getProtect() { public boolean getProtect() {
@ -1121,6 +1133,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Answer whether object protection is enabled or disabled * Answer whether object protection is enabled or disabled
*
* @return true => protection enabled; false => protection disabled * @return true => protection enabled; false => protection disabled
*/ */
public boolean getObjectProtect() { public boolean getObjectProtect() {
@ -1129,13 +1142,16 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Answer whether scenario protection is enabled or disabled * Answer whether scenario protection is enabled or disabled
*
* @return true => protection enabled; false => protection disabled * @return true => protection enabled; false => protection disabled
*/ */
public boolean getScenarioProtect() { public boolean getScenarioProtect() {
return getProtectionBlock().isScenarioProtected(); return getProtectionBlock().isScenarioProtected();
} }
/** /**
* Sets the protection enabled as well as the password * Sets the protection enabled as well as the password
*
* @param password to set for protection. Pass <code>null</code> to remove protection * @param password to set for protection. Pass <code>null</code> to remove protection
*/ */
public void protectSheet(String password) { public void protectSheet(String password) {
@ -1150,8 +1166,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
* @param numerator The numerator for the zoom magnification. * @param numerator The numerator for the zoom magnification.
* @param denominator The denominator for the zoom magnification. * @param denominator The denominator for the zoom magnification.
*/ */
public void setZoom( int numerator, int denominator) public void setZoom(int numerator, int denominator) {
{
if (numerator < 1 || numerator > 65535) if (numerator < 1 || numerator > 65535)
throw new IllegalArgumentException("Numerator must be greater than 1 and less than 65536"); throw new IllegalArgumentException("Numerator must be greater than 1 and less than 65536");
if (denominator < 1 || denominator > 65535) if (denominator < 1 || denominator > 65535)
@ -1166,6 +1181,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* The top row in the visible view when the sheet is * The top row in the visible view when the sheet is
* first viewed after opening it in a viewer * first viewed after opening it in a viewer
*
* @return short indicating the rownum (0 based) of the top row * @return short indicating the rownum (0 based) of the top row
*/ */
public short getTopRow() { public short getTopRow() {
@ -1175,6 +1191,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* The left col in the visible view when the sheet is * The left col in the visible view when the sheet is
* first viewed after opening it in a viewer * first viewed after opening it in a viewer
*
* @return short indicating the rownum (0 based) of the top row * @return short indicating the rownum (0 based) of the top row
*/ */
public short getLeftCol() { public short getLeftCol() {
@ -1184,6 +1201,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Sets desktop window pane display area, when the * Sets desktop window pane display area, when the
* file is first opened in a viewer. * file is first opened in a viewer.
*
* @param toprow the top row to show in desktop window pane * @param toprow the top row to show in desktop window pane
* @param leftcol the left column to show in desktop window pane * @param leftcol the left column to show in desktop window pane
*/ */
@ -1194,8 +1212,9 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Shifts the merged regions left or right depending on mode * Shifts the merged regions left or right depending on mode
* <p> * <p/>
* TODO: MODE , this is only row specific * TODO: MODE , this is only row specific
*
* @param startRow * @param startRow
* @param endRow * @param endRow
* @param n * @param n
@ -1240,12 +1259,13 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
* Shifts rows between startRow and endRow n number of rows. * Shifts rows between startRow and endRow n number of rows.
* If you use a negative number, it will shift rows up. * If you use a negative number, it will shift rows up.
* Code ensures that rows don't wrap around. * Code ensures that rows don't wrap around.
* * <p/>
* Calls shiftRows(startRow, endRow, n, false, false); * Calls shiftRows(startRow, endRow, n, false, false);
* * <p/>
* <p> * <p/>
* Additionally shifts merged regions that are completely defined in these * Additionally shifts merged regions that are completely defined in these
* rows (ie. merged 2 cells on a row to be shifted). * rows (ie. merged 2 cells on a row to be shifted).
*
* @param startRow the row to start shifting * @param startRow the row to start shifting
* @param endRow the row to end shifting * @param endRow the row to end shifting
* @param n the number of rows to shift * @param n the number of rows to shift
@ -1258,12 +1278,13 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
* Shifts rows between startRow and endRow n number of rows. * Shifts rows between startRow and endRow n number of rows.
* If you use a negative number, it will shift rows up. * If you use a negative number, it will shift rows up.
* Code ensures that rows don't wrap around * Code ensures that rows don't wrap around
* * <p/>
* <p> * <p/>
* Additionally shifts merged regions that are completely defined in these * Additionally shifts merged regions that are completely defined in these
* rows (ie. merged 2 cells on a row to be shifted). * rows (ie. merged 2 cells on a row to be shifted).
* <p> * <p/>
* TODO Might want to add bounds checking here * TODO Might want to add bounds checking here
*
* @param startRow the row to start shifting * @param startRow the row to start shifting
* @param endRow the row to end shifting * @param endRow the row to end shifting
* @param n the number of rows to shift * @param n the number of rows to shift
@ -1278,12 +1299,13 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
* Shifts rows between startRow and endRow n number of rows. * Shifts rows between startRow and endRow n number of rows.
* If you use a negative number, it will shift rows up. * If you use a negative number, it will shift rows up.
* Code ensures that rows don't wrap around * Code ensures that rows don't wrap around
* * <p/>
* <p> * <p/>
* Additionally shifts merged regions that are completely defined in these * Additionally shifts merged regions that are completely defined in these
* rows (ie. merged 2 cells on a row to be shifted). * rows (ie. merged 2 cells on a row to be shifted).
* <p> * <p/>
* TODO Might want to add bounds checking here * TODO Might want to add bounds checking here
*
* @param startRow the row to start shifting * @param startRow the row to start shifting
* @param endRow the row to end shifting * @param endRow the row to end shifting
* @param n the number of rows to shift * @param n the number of rows to shift
@ -1455,7 +1477,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Creates a split (freezepane). Any existing freezepane or split pane is overwritten. * Creates a split (freezepane). Any existing freezepane or split pane is overwritten.
* * <p/>
* <p> * <p>
* If both colSplit and rowSplit are zero then the existing freeze pane is removed * If both colSplit and rowSplit are zero then the existing freeze pane is removed
* </p> * </p>
@ -1468,14 +1490,16 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
public void createFreezePane(int colSplit, int rowSplit, int leftmostColumn, int topRow) { public void createFreezePane(int colSplit, int rowSplit, int leftmostColumn, int topRow) {
validateColumn(colSplit); validateColumn(colSplit);
validateRow(rowSplit); validateRow(rowSplit);
if (leftmostColumn < colSplit) throw new IllegalArgumentException("leftmostColumn parameter must not be less than colSplit parameter"); if (leftmostColumn < colSplit)
if (topRow < rowSplit) throw new IllegalArgumentException("topRow parameter must not be less than leftmostColumn parameter"); 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); getSheet().createFreezePane(colSplit, rowSplit, topRow, leftmostColumn);
} }
/** /**
* Creates a split (freezepane). Any existing freezepane or split pane is overwritten. * Creates a split (freezepane). Any existing freezepane or split pane is overwritten.
* * <p/>
* <p> * <p>
* If both colSplit and rowSplit are zero then the existing freeze pane is removed * If both colSplit and rowSplit are zero then the existing freeze pane is removed
* </p> * </p>
@ -1489,6 +1513,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Creates a split pane. Any existing freezepane or split pane is overwritten. * 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 xSplitPos Horizonatal position of split (in 1/20th of a point).
* @param ySplitPos Vertical 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 topRow Top row visible in bottom pane
@ -1506,6 +1531,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Returns the information regarding the currently configured pane (split or freeze). * Returns the information regarding the currently configured pane (split or freeze).
*
* @return null if no pane configured, or the pane information. * @return null if no pane configured, or the pane information.
*/ */
public PaneInformation getPaneInformation() { public PaneInformation getPaneInformation() {
@ -1514,6 +1540,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Sets whether the gridlines are shown in a viewer. * Sets whether the gridlines are shown in a viewer.
*
* @param show whether to show gridlines or not * @param show whether to show gridlines or not
*/ */
public void setDisplayGridlines(boolean show) { public void setDisplayGridlines(boolean show) {
@ -1522,6 +1549,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Returns if gridlines are displayed. * Returns if gridlines are displayed.
*
* @return whether gridlines are displayed * @return whether gridlines are displayed
*/ */
public boolean isDisplayGridlines() { public boolean isDisplayGridlines() {
@ -1530,6 +1558,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Sets whether the formulas are shown in a viewer. * Sets whether the formulas are shown in a viewer.
*
* @param show whether to show formulas or not * @param show whether to show formulas or not
*/ */
public void setDisplayFormulas(boolean show) { public void setDisplayFormulas(boolean show) {
@ -1538,6 +1567,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Returns if formulas are displayed. * Returns if formulas are displayed.
*
* @return whether formulas are displayed * @return whether formulas are displayed
*/ */
public boolean isDisplayFormulas() { public boolean isDisplayFormulas() {
@ -1546,6 +1576,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Sets whether the RowColHeadings are shown in a viewer. * Sets whether the RowColHeadings are shown in a viewer.
*
* @param show whether to show RowColHeadings or not * @param show whether to show RowColHeadings or not
*/ */
public void setDisplayRowColHeadings(boolean show) { public void setDisplayRowColHeadings(boolean show) {
@ -1554,6 +1585,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Returns if RowColHeadings are displayed. * Returns if RowColHeadings are displayed.
*
* @return whether RowColHeadings are displayed * @return whether RowColHeadings are displayed
*/ */
public boolean isDisplayRowColHeadings() { public boolean isDisplayRowColHeadings() {
@ -1563,7 +1595,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Sets a page break at the indicated row * Sets a page break at the indicated row
* Breaks occur above the specified row and left of the specified column inclusive. * Breaks occur above the specified row and left of the specified column inclusive.
* * <p/>
* For example, <code>sheet.setColumnBreak(2);</code> breaks the sheet into two parts * For example, <code>sheet.setColumnBreak(2);</code> breaks the sheet into two parts
* with columns A,B,C in the first and D,E,... in the second. Simuilar, <code>sheet.setRowBreak(2);</code> * with columns A,B,C in the first and D,E,... in the second. Simuilar, <code>sheet.setRowBreak(2);</code>
* breaks the sheet into two parts with first three rows (rownum=1...3) in the first part * breaks the sheet into two parts with first three rows (rownum=1...3) in the first part
@ -1610,7 +1642,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Sets a page break at the indicated column. * Sets a page break at the indicated column.
* Breaks occur above the specified row and left of the specified column inclusive. * Breaks occur above the specified row and left of the specified column inclusive.
* * <p/>
* For example, <code>sheet.setColumnBreak(2);</code> breaks the sheet into two parts * For example, <code>sheet.setColumnBreak(2);</code> breaks the sheet into two parts
* with columns A,B,C in the first and D,E,... in the second. Simuilar, <code>sheet.setRowBreak(2);</code> * with columns A,B,C in the first and D,E,... in the second. Simuilar, <code>sheet.setRowBreak(2);</code>
* breaks the sheet into two parts with first three rows (rownum=1...3) in the first part * breaks the sheet into two parts with first three rows (rownum=1...3) in the first part
@ -1625,6 +1657,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Determines if there is a page break at the indicated column * Determines if there is a page break at the indicated column
*
* @param column FIXME: Document this! * @param column FIXME: Document this!
* @return FIXME: Document this! * @return FIXME: Document this!
*/ */
@ -1634,6 +1667,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Removes a page break at the indicated column * Removes a page break at the indicated column
*
* @param column * @param column
*/ */
public void removeColumnBreak(int column) { public void removeColumnBreak(int column) {
@ -1642,6 +1676,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Runs a bounds check for row numbers * Runs a bounds check for row numbers
*
* @param row * @param row
*/ */
protected void validateRow(int row) { protected void validateRow(int row) {
@ -1652,6 +1687,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Runs a bounds check for column numbers * Runs a bounds check for column numbers
*
* @param column * @param column
*/ */
protected void validateColumn(int column) { protected void validateColumn(int column) {
@ -1681,36 +1717,9 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
w.flush(); w.flush();
} }
/**
* Creates the top-level drawing patriarch. This will have
* the effect of removing any existing drawings on this
* sheet.
* This may then be used to add graphics or charts
* @return The new patriarch.
*/
public HSSFPatriarch createDrawingPatriarch() {
if(_patriarch == null){
// Create the drawing group if it doesn't already exist.
_workbook.initDrawings();
if(_patriarch == null){
_sheet.aggregateDrawingRecords(_book.getDrawingManager(), true);
EscherAggregate agg = (EscherAggregate) _sheet.findFirstRecordBySid(EscherAggregate.sid);
_patriarch = new HSSFPatriarch(this, agg);
_patriarch.afterCreate();
// agg.setPatriarch(_patriarch);
}
}
return _patriarch;
}
/** /**
* Returns the agregate escher records for this sheet, * Returns the agregate escher records for this sheet,
* it there is one. * it there is one.
* WARNING - calling this will trigger a parsing of the
* associated escher records. Any that aren't supported
* (such as charts and complex drawing types) will almost
* certainly be lost or corrupted when written out.
*/ */
public EscherAggregate getDrawingEscherAggregate() { public EscherAggregate getDrawingEscherAggregate() {
_book.findDrawingGroup(); _book.findDrawingGroup();
@ -1735,51 +1744,76 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
} }
/** /**
* Returns the top-level drawing patriach, if there is
* one.
* This will hold any graphics or charts for the sheet. * This will hold any graphics or charts for the sheet.
* WARNING - calling this will trigger a parsing of the *
* associated escher records. Any that aren't supported * @return the top-level drawing patriarch, if there is one, else returns null
* (such as charts and complex drawing types) will almost
* certainly be lost or corrupted when written out. Only
* use this with simple drawings, otherwise call
* {@link HSSFSheet#createDrawingPatriarch()} and
* start from scratch!
*/ */
public HSSFPatriarch getDrawingPatriarch() { public HSSFPatriarch getDrawingPatriarch() {
if(_patriarch != null) return _patriarch; _patriarch = getPatriarch(false);
EscherAggregate agg = getDrawingEscherAggregate();
if(agg == null) return null;
_patriarch = new HSSFPatriarch(this, agg);
// _patriarch.buildShapeTree();
//HSSFShapeFactory.createShapeTree();
//agg.setPatriarch(_patriarch);
//EscherAggregate.createShapeTree(EscherAggregate.getMainSpgrContainer(agg), agg.getPatriarch(), agg);
// Have it process the records into high level objects
// as best it can do (this step may eat anything
// that isn't supported, you were warned...)
// agg.convertRecordsToUserModel();
// Return what we could cope with
return _patriarch; return _patriarch;
} }
/**
* Creates the top-level drawing patriarch. This will have
* the effect of removing any existing drawings on this
* sheet.
* This may then be used to add graphics or charts
*
* @return The new patriarch.
*/
public HSSFPatriarch createDrawingPatriarch() {
_patriarch = getPatriarch(true);
return _patriarch;
}
private HSSFPatriarch getPatriarch(boolean createIfMissing) {
HSSFPatriarch patriarch = null;
if (_patriarch != null) {
return _patriarch;
}
DrawingManager2 dm = _book.findDrawingGroup();
if (null == dm) {
if (!createIfMissing) {
return null;
} else {
_book.createDrawingGroup();
dm = _book.getDrawingManager();
}
}
EscherAggregate agg = (EscherAggregate) _sheet.findFirstRecordBySid(EscherAggregate.sid);
if (null == agg) {
int pos = _sheet.aggregateDrawingRecords(dm, false);
if (-1 == pos) {
if (createIfMissing) {
pos = _sheet.aggregateDrawingRecords(dm, true);
agg = (EscherAggregate) _sheet.getRecords().get(pos);
patriarch = new HSSFPatriarch(this, agg);
patriarch.afterCreate();
return patriarch;
} else {
return null;
}
}
agg = (EscherAggregate) _sheet.getRecords().get(pos);
}
return new HSSFPatriarch(this, agg);
}
/** /**
* @deprecated (Sep 2008) use {@link #setColumnGroupCollapsed(int, boolean)} * @deprecated (Sep 2008) use {@link #setColumnGroupCollapsed(int, boolean)}
*/ */
public void setColumnGroupCollapsed(short columnNumber, boolean collapsed) { public void setColumnGroupCollapsed(short columnNumber, boolean collapsed) {
setColumnGroupCollapsed(columnNumber & 0xFFFF, collapsed); setColumnGroupCollapsed(columnNumber & 0xFFFF, collapsed);
} }
/** /**
* @deprecated (Sep 2008) use {@link #groupColumn(int, int)} * @deprecated (Sep 2008) use {@link #groupColumn(int, int)}
*/ */
public void groupColumn(short fromColumn, short toColumn) { public void groupColumn(short fromColumn, short toColumn) {
groupColumn(fromColumn & 0xFFFF, toColumn & 0xFFFF); groupColumn(fromColumn & 0xFFFF, toColumn & 0xFFFF);
} }
/** /**
* @deprecated (Sep 2008) use {@link #ungroupColumn(int, int)} * @deprecated (Sep 2008) use {@link #ungroupColumn(int, int)}
*/ */
@ -1845,7 +1879,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Adjusts the column width to fit the contents. * Adjusts the column width to fit the contents.
* * <p/>
* This process can be relatively slow on large sheets, so this should * This process can be relatively slow on large sheets, so this should
* normally only be called once per column, at the end of your * normally only be called once per column, at the end of your
* processing. * processing.
@ -1858,11 +1892,11 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Adjusts the column width to fit the contents. * Adjusts the column width to fit the contents.
* * <p/>
* This process can be relatively slow on large sheets, so this should * This process can be relatively slow on large sheets, so this should
* normally only be called once per column, at the end of your * normally only be called once per column, at the end of your
* processing. * processing.
* * <p/>
* You can specify whether the content of merged cells should be considered or ignored. * You can specify whether the content of merged cells should be considered or ignored.
* Default is to ignore merged cells. * Default is to ignore merged cells.
* *

View File

@ -0,0 +1,40 @@
package org.apache.poi.hssf.usermodel;
import junit.framework.TestCase;
import org.apache.poi.ddf.EscherDgRecord;
import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.hssf.record.EscherAggregate;
/**
* @author Evgeniy Berlog
* @date 01.08.12
*/
public class TestPatriarch extends TestCase {
public void testGetPatriarch(){
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sh = wb.createSheet();
assertNull(sh.getDrawingPatriarch());
HSSFPatriarch patriarch = sh.createDrawingPatriarch();
assertNotNull(patriarch);
patriarch.createSimpleShape(new HSSFClientAnchor());
patriarch.createSimpleShape(new HSSFClientAnchor());
assertSame(patriarch, sh.getDrawingPatriarch());
EscherAggregate agg = patriarch._getBoundAggregate();
EscherDgRecord dg = agg.getEscherContainer().getChildById(EscherDgRecord.RECORD_ID);
int lastId = dg.getLastMSOSPID();
assertSame(patriarch, sh.createDrawingPatriarch());
wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
sh = wb.getSheetAt(0);
patriarch = sh.createDrawingPatriarch();
dg = patriarch._getBoundAggregate().getEscherContainer().getChildById(EscherDgRecord.RECORD_ID);
assertEquals(lastId, dg.getLastMSOSPID());
}
}