mirror of https://github.com/apache/poi.git
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:
parent
7305869f20
commit
3c170100d7
|
@ -1482,6 +1482,7 @@ public final class InternalSheet {
|
|||
* if none currently exist
|
||||
* @param drawingManager The DrawingManager2 for our workbook
|
||||
* @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) {
|
||||
int loc = findFirstRecordLocBySid(DrawingRecord.sid);
|
||||
|
|
|
@ -539,14 +539,18 @@ public final class EscherAggregate extends AbstractEscherHolderRecord {
|
|||
//First record in drawing layer MUST be DrawingRecord
|
||||
if (writtenEscherBytes + drawingData.length > RecordInputStream.MAX_RECORD_DATA_SIZE && i != 1) {
|
||||
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);
|
||||
}
|
||||
} else {
|
||||
for (int j = 0; j < drawingData.length; j += RecordInputStream.MAX_RECORD_DATA_SIZE) {
|
||||
if (j == 0) {
|
||||
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);
|
||||
} else {
|
||||
ContinueRecord drawing = new ContinueRecord(Arrays.copyOfRange(drawingData, j, Math.min(j + RecordInputStream.MAX_RECORD_DATA_SIZE, drawingData.length)));
|
||||
|
|
|
@ -51,4 +51,6 @@ public interface HSSFShapeContainer extends Iterable<HSSFShape>
|
|||
public int getX2();
|
||||
|
||||
public int getY2();
|
||||
|
||||
public boolean removeShape(HSSFShape shape);
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@ import java.util.List;
|
|||
import java.util.TreeMap;
|
||||
|
||||
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.InternalSheet;
|
||||
import org.apache.poi.hssf.model.InternalWorkbook;
|
||||
|
@ -52,6 +53,7 @@ import org.apache.poi.util.POILogger;
|
|||
|
||||
/**
|
||||
* 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)
|
||||
|
@ -76,7 +78,9 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
|
|||
* reference to the low level {@link InternalSheet} object
|
||||
*/
|
||||
private final InternalSheet _sheet;
|
||||
/** stores rows by zero-based row number */
|
||||
/**
|
||||
* stores rows by zero-based row number
|
||||
*/
|
||||
private final TreeMap<Integer, HSSFRow> _rows;
|
||||
protected final InternalWorkbook _book;
|
||||
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 #removeRow(org.apache.poi.ss.usermodel.Row)
|
||||
*/
|
||||
public HSSFRow createRow(int rownum)
|
||||
{
|
||||
public HSSFRow createRow(int rownum) {
|
||||
HSSFRow row = new HSSFRow(_workbook, this, rownum);
|
||||
// new rows inherit default height from the sheet
|
||||
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 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
|
||||
*/
|
||||
|
||||
private HSSFRow createRowFromRecord(RowRecord row)
|
||||
{
|
||||
private HSSFRow createRowFromRecord(RowRecord row) {
|
||||
HSSFRow hrow = new HSSFRow(_workbook, this, row);
|
||||
|
||||
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
|
||||
throw new IllegalArgumentException("Specified row does not belong to this sheet");
|
||||
}
|
||||
if (hrow.getRowNum() == getLastRowNum())
|
||||
{
|
||||
if (hrow.getRowNum() == getLastRowNum()) {
|
||||
_lastrow = findLastRow(_lastrow);
|
||||
}
|
||||
if (hrow.getRowNum() == getFirstRowNum())
|
||||
{
|
||||
if (hrow.getRowNum() == getFirstRowNum()) {
|
||||
_firstrow = findFirstRow(_firstrow);
|
||||
}
|
||||
_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.
|
||||
*/
|
||||
|
||||
private int findFirstRow(int firstrow)
|
||||
{
|
||||
private int findFirstRow(int firstrow) {
|
||||
int rownum = firstrow + 1;
|
||||
HSSFRow r = getRow(rownum);
|
||||
|
||||
while (r == null && rownum <= getLastRowNum())
|
||||
{
|
||||
while (r == null && rownum <= getLastRowNum()) {
|
||||
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
|
||||
*/
|
||||
|
||||
private void addRow(HSSFRow row, boolean addLow)
|
||||
{
|
||||
private void addRow(HSSFRow row, boolean addLow) {
|
||||
_rows.put(Integer.valueOf(row.getRowNum()), row);
|
||||
if (addLow)
|
||||
{
|
||||
if (addLow) {
|
||||
_sheet.addRow(row.getRowRecord());
|
||||
}
|
||||
boolean firstRow = _rows.size() == 1;
|
||||
if (row.getRowNum() > getLastRowNum() || firstRow)
|
||||
{
|
||||
if (row.getRowNum() > getLastRowNum() || firstRow) {
|
||||
_lastrow = row.getRowNum();
|
||||
}
|
||||
if (row.getRowNum() < getFirstRowNum() || firstRow)
|
||||
{
|
||||
if (row.getRowNum() < getFirstRowNum() || firstRow) {
|
||||
_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
|
||||
* defined you get a null. This is to say row 4 represents the fifth row on a sheet.
|
||||
*
|
||||
* @param rowIndex row to get
|
||||
* @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
|
||||
*
|
||||
* @return the number of the first logical row on the sheet, zero based
|
||||
*/
|
||||
public int getFirstRowNum() {
|
||||
|
@ -365,6 +362,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
|
|||
* call {@link #getPhysicalNumberOfRows()} to
|
||||
* tell if there is a row at position zero
|
||||
* or not.
|
||||
*
|
||||
* @return the number of the last row contained in this sheet, zero based.
|
||||
*/
|
||||
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.
|
||||
*
|
||||
* @param columnIndex - the column to get (0-based)
|
||||
* @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.
|
||||
*
|
||||
* @param columnIndex - the column to set (0-based)
|
||||
* @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)
|
||||
*
|
||||
* <p/>
|
||||
* <p>
|
||||
* The maximum column width for an individual cell is 255 characters.
|
||||
* 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).
|
||||
* </p>
|
||||
*
|
||||
* <p/>
|
||||
* <p>
|
||||
* Character width is defined as the maximum digit width
|
||||
* 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),
|
||||
* this is true for Arial (default font font in HSSF) and Calibri (default font in XSSF)
|
||||
* </p>
|
||||
*
|
||||
* <p/>
|
||||
* <p>
|
||||
* 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).
|
||||
|
@ -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>,
|
||||
* then the actual value of visible characters (the value shown in Excel) is derived from the following equation:
|
||||
* <code>
|
||||
Truncate([numChars*7+5]/7*256)/256 = 8;
|
||||
* Truncate([numChars*7+5]/7*256)/256 = 8;
|
||||
* </code>
|
||||
*
|
||||
* <p/>
|
||||
* which gives <code>7.29</code>.
|
||||
*
|
||||
* @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 )
|
||||
*
|
||||
* @param columnIndex - the column to set (0-based)
|
||||
* @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
|
||||
* characters
|
||||
*
|
||||
* @return default column width
|
||||
*/
|
||||
public int getDefaultColumnWidth() {
|
||||
return _sheet.getDefaultColumnWidth();
|
||||
}
|
||||
|
||||
/**
|
||||
* set the default column width for the sheet (if the columns do not define their own width) in
|
||||
* characters
|
||||
*
|
||||
* @param width default column 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
|
||||
*/
|
||||
|
||||
public float getDefaultRowHeightInPoints()
|
||||
{
|
||||
public float getDefaultRowHeightInPoints() {
|
||||
return ((float) _sheet.getDefaultRowHeight() / 20);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
|
||||
public void setDefaultRowHeight(short height)
|
||||
{
|
||||
public void setDefaultRowHeight(short height) {
|
||||
_sheet.setDefaultRowHeight(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
|
||||
*/
|
||||
|
||||
public void setDefaultRowHeightInPoints(float height)
|
||||
{
|
||||
public void setDefaultRowHeightInPoints(float height) {
|
||||
_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.
|
||||
*
|
||||
* @return true if printed
|
||||
*/
|
||||
|
||||
public boolean isGridsPrinted()
|
||||
{
|
||||
public boolean isGridsPrinted() {
|
||||
return _sheet.isGridsPrinted();
|
||||
}
|
||||
|
||||
/**
|
||||
* set whether gridlines printed.
|
||||
*
|
||||
* @param value false if not printed.
|
||||
*/
|
||||
|
||||
public void setGridsPrinted(boolean value)
|
||||
{
|
||||
public void setGridsPrinted(boolean value) {
|
||||
_sheet.setGridsPrinted(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* @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(),
|
||||
region.getColumnFrom(),
|
||||
//(short) region.getRowTo(),
|
||||
region.getRowTo(),
|
||||
region.getColumnTo());
|
||||
}
|
||||
|
||||
/**
|
||||
* adds a merged region of cells (hence those cells form one)
|
||||
*
|
||||
* @param region (rowfrom/colfrom-rowto/colto) to merge
|
||||
* @return index of this region
|
||||
*/
|
||||
public int addMergedRegion(CellRangeAddress region)
|
||||
{
|
||||
public int addMergedRegion(CellRangeAddress region) {
|
||||
region.validate(SpreadsheetVersion.EXCEL97);
|
||||
|
||||
// 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
|
||||
* when the workbook is opened.
|
||||
*
|
||||
* <p/>
|
||||
* <p>
|
||||
* 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
|
||||
* evaluation in POI is not possible.
|
||||
* </p>
|
||||
*
|
||||
* <p/>
|
||||
* <p>
|
||||
* It is recommended to force recalcuation of formulas on workbook level using
|
||||
* {@link org.apache.poi.ss.usermodel.Workbook#setForceFormulaRecalculation(boolean)}
|
||||
* to ensure that all cross-worksheet formuals and external dependencies are updated.
|
||||
* </p>
|
||||
*
|
||||
* @param value true if the application will perform a full recalculation of
|
||||
* this worksheet values when the workbook is opened
|
||||
*
|
||||
* @see org.apache.poi.ss.usermodel.Workbook#setForceFormulaRecalculation(boolean)
|
||||
*/
|
||||
public void setForceFormulaRecalculation(boolean value)
|
||||
{
|
||||
public void setForceFormulaRecalculation(boolean value) {
|
||||
_sheet.setUncalced(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether a record must be inserted or not at generation to indicate that
|
||||
* formula must be recalculated when workbook is opened.
|
||||
*
|
||||
* @return true if an uncalced record must be inserted or not at generation
|
||||
*/
|
||||
public boolean getForceFormulaRecalculation()
|
||||
{
|
||||
public boolean getForceFormulaRecalculation() {
|
||||
return _sheet.getUncalced();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* determines whether the output is vertically centered on the page.
|
||||
*
|
||||
* @param value true to vertically center, false otherwise.
|
||||
*/
|
||||
|
||||
public void setVerticallyCenter(boolean value)
|
||||
{
|
||||
public void setVerticallyCenter(boolean value) {
|
||||
_sheet.getPageSettings().getVCenter().setVCenter(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: Boolean not needed, remove after next release
|
||||
*
|
||||
* @deprecated (Mar-2008) use getVerticallyCenter() instead
|
||||
*/
|
||||
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.
|
||||
*/
|
||||
public boolean getVerticallyCenter()
|
||||
{
|
||||
public boolean getVerticallyCenter() {
|
||||
return _sheet.getPageSettings().getVCenter().getVCenter();
|
||||
}
|
||||
|
||||
/**
|
||||
* determines whether the output is horizontally centered on the page.
|
||||
*
|
||||
* @param value true to horizontally center, false otherwise.
|
||||
*/
|
||||
|
||||
public void setHorizontallyCenter(boolean value)
|
||||
{
|
||||
public void setHorizontallyCenter(boolean 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.
|
||||
*/
|
||||
|
||||
public boolean getHorizontallyCenter()
|
||||
{
|
||||
public boolean getHorizontallyCenter() {
|
||||
|
||||
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.
|
||||
*/
|
||||
public void setRightToLeft(boolean value)
|
||||
{
|
||||
public void setRightToLeft(boolean 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
|
||||
*/
|
||||
public boolean isRightToLeft()
|
||||
{
|
||||
public boolean isRightToLeft() {
|
||||
return _sheet.getWindowTwo().getArabic();
|
||||
}
|
||||
|
||||
/**
|
||||
* removes a merged region of cells (hence letting them free)
|
||||
*
|
||||
* @param index of the region to unmerge
|
||||
*/
|
||||
|
||||
public void removeMergedRegion(int index)
|
||||
{
|
||||
public void removeMergedRegion(int index) {
|
||||
_sheet.removeMergedRegion(index);
|
||||
}
|
||||
|
||||
/**
|
||||
* returns the number of merged regions
|
||||
*
|
||||
* @return number of merged regions
|
||||
*/
|
||||
|
||||
public int getNumMergedRegions()
|
||||
{
|
||||
public int 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(),
|
||||
cra.getLastRow(), (short) cra.getLastColumn());
|
||||
}
|
||||
|
||||
/**
|
||||
* @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();
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias for {@link #rowIterator()} to allow
|
||||
* 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)
|
||||
*
|
||||
* @return <code>true</code> if this sheet is currently selected
|
||||
*/
|
||||
public boolean isSelected() {
|
||||
return getSheet().getWindowTwo().getSelected();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether sheet is selected.
|
||||
*
|
||||
* @param sel Whether to select the sheet or deselect the sheet.
|
||||
*/
|
||||
public void setSelected(boolean sel) {
|
||||
getSheet().getWindowTwo().setSelected(sel);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return <code>true</code> if this sheet is currently focused
|
||||
*/
|
||||
public boolean isActive() {
|
||||
return getSheet().getWindowTwo().isActive();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether sheet is selected.
|
||||
*
|
||||
* @param sel Whether to select the sheet or deselect the sheet.
|
||||
*/
|
||||
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.
|
||||
*
|
||||
* @param margin which margin to get
|
||||
* @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.
|
||||
*
|
||||
* @param margin which margin to get
|
||||
* @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() {
|
||||
return _sheet.getProtectionBlock();
|
||||
}
|
||||
|
||||
/**
|
||||
* Answer whether protection is enabled or disabled
|
||||
*
|
||||
* @return true => protection enabled; false => protection disabled
|
||||
*/
|
||||
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
|
||||
*
|
||||
* @return true => protection enabled; false => protection disabled
|
||||
*/
|
||||
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
|
||||
*
|
||||
* @return true => protection enabled; false => protection disabled
|
||||
*/
|
||||
public boolean getScenarioProtect() {
|
||||
return getProtectionBlock().isScenarioProtected();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the protection enabled as well as the password
|
||||
*
|
||||
* @param password to set for protection. Pass <code>null</code> to remove protection
|
||||
*/
|
||||
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 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)
|
||||
throw new IllegalArgumentException("Numerator must be greater than 1 and less than 65536");
|
||||
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
|
||||
* first viewed after opening it in a viewer
|
||||
*
|
||||
* @return short indicating the rownum (0 based) of the top row
|
||||
*/
|
||||
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
|
||||
* first viewed after opening it in a viewer
|
||||
*
|
||||
* @return short indicating the rownum (0 based) of the top row
|
||||
*/
|
||||
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
|
||||
* 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
|
||||
*/
|
||||
|
@ -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
|
||||
* <p>
|
||||
* <p/>
|
||||
* TODO: MODE , this is only row specific
|
||||
*
|
||||
* @param startRow
|
||||
* @param endRow
|
||||
* @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.
|
||||
* If you use a negative number, it will shift rows up.
|
||||
* Code ensures that rows don't wrap around.
|
||||
*
|
||||
* <p/>
|
||||
* Calls shiftRows(startRow, endRow, n, false, false);
|
||||
*
|
||||
* <p>
|
||||
* <p/>
|
||||
* <p/>
|
||||
* 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
|
||||
|
@ -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.
|
||||
* If you use a negative number, it will shift rows up.
|
||||
* Code ensures that rows don't wrap around
|
||||
*
|
||||
* <p>
|
||||
* <p/>
|
||||
* <p/>
|
||||
* Additionally shifts merged regions that are completely defined in these
|
||||
* rows (ie. merged 2 cells on a row to be shifted).
|
||||
* <p>
|
||||
* <p/>
|
||||
* 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
|
||||
|
@ -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.
|
||||
* If you use a negative number, it will shift rows up.
|
||||
* Code ensures that rows don't wrap around
|
||||
*
|
||||
* <p>
|
||||
* <p/>
|
||||
* <p/>
|
||||
* Additionally shifts merged regions that are completely defined in these
|
||||
* rows (ie. merged 2 cells on a row to be shifted).
|
||||
* <p>
|
||||
* <p/>
|
||||
* 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
|
||||
|
@ -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.
|
||||
*
|
||||
* <p/>
|
||||
* <p>
|
||||
* If both colSplit and rowSplit are zero then the existing freeze pane is removed
|
||||
* </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) {
|
||||
validateColumn(colSplit);
|
||||
validateRow(rowSplit);
|
||||
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");
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a split (freezepane). Any existing freezepane or split pane is overwritten.
|
||||
*
|
||||
* <p/>
|
||||
* <p>
|
||||
* If both colSplit and rowSplit are zero then the existing freeze pane is removed
|
||||
* </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.
|
||||
*
|
||||
* @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
|
||||
|
@ -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).
|
||||
*
|
||||
* @return null if no pane configured, or the pane information.
|
||||
*/
|
||||
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.
|
||||
*
|
||||
* @param show whether to show gridlines or not
|
||||
*/
|
||||
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.
|
||||
*
|
||||
* @return whether gridlines are displayed
|
||||
*/
|
||||
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.
|
||||
*
|
||||
* @param show whether to show formulas or not
|
||||
*/
|
||||
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.
|
||||
*
|
||||
* @return whether formulas are displayed
|
||||
*/
|
||||
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.
|
||||
*
|
||||
* @param show whether to show RowColHeadings or not
|
||||
*/
|
||||
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.
|
||||
*
|
||||
* @return whether RowColHeadings are displayed
|
||||
*/
|
||||
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
|
||||
* 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
|
||||
* 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
|
||||
|
@ -1610,7 +1642,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
|
|||
/**
|
||||
* Sets a page break at the indicated column.
|
||||
* 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
|
||||
* 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
|
||||
|
@ -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
|
||||
*
|
||||
* @param column 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
|
||||
*
|
||||
* @param 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
|
||||
*
|
||||
* @param 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
|
||||
*
|
||||
* @param column
|
||||
*/
|
||||
protected void validateColumn(int column) {
|
||||
|
@ -1681,36 +1717,9 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
|
|||
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,
|
||||
* 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() {
|
||||
_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.
|
||||
* 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. Only
|
||||
* use this with simple drawings, otherwise call
|
||||
* {@link HSSFSheet#createDrawingPatriarch()} and
|
||||
* start from scratch!
|
||||
*
|
||||
* @return the top-level drawing patriarch, if there is one, else returns null
|
||||
*/
|
||||
public HSSFPatriarch getDrawingPatriarch() {
|
||||
if(_patriarch != null) return _patriarch;
|
||||
|
||||
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
|
||||
_patriarch = getPatriarch(false);
|
||||
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)}
|
||||
*/
|
||||
|
||||
public void setColumnGroupCollapsed(short columnNumber, boolean collapsed) {
|
||||
setColumnGroupCollapsed(columnNumber & 0xFFFF, collapsed);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated (Sep 2008) use {@link #groupColumn(int, int)}
|
||||
*/
|
||||
public void groupColumn(short fromColumn, short toColumn) {
|
||||
groupColumn(fromColumn & 0xFFFF, toColumn & 0xFFFF);
|
||||
}
|
||||
|
||||
/**
|
||||
* @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.
|
||||
*
|
||||
* <p/>
|
||||
* This process can be relatively slow on large sheets, so this should
|
||||
* normally only be called once per column, at the end of your
|
||||
* processing.
|
||||
|
@ -1858,11 +1892,11 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
|
|||
|
||||
/**
|
||||
* Adjusts the column width to fit the contents.
|
||||
*
|
||||
* <p/>
|
||||
* This process can be relatively slow on large sheets, so this should
|
||||
* normally only be called once per column, at the end of your
|
||||
* processing.
|
||||
*
|
||||
* <p/>
|
||||
* You can specify whether the content of merged cells should be considered or ignored.
|
||||
* Default is to ignore merged cells.
|
||||
*
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue