From: Josh Micich Date: Wed, 21 May 2008 19:57:40 +0000 (+0000) Subject: improved toString and refactored toFormulaString on Area(3D)Ptg X-Git-Tag: REL_3_2_FINAL~321 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d1c80ce72348c5c5db11ba029b674bae6663057a;p=poi.git improved toString and refactored toFormulaString on Area(3D)Ptg git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@658833 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java b/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java index b0322ab785..f2b801f690 100644 --- a/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java @@ -27,7 +27,7 @@ import org.apache.poi.util.LittleEndian; /** - * Title: Area 3D Ptg - 3D referecnce (Sheet + Area)

+ * Title: Area 3D Ptg - 3D reference (Sheet + Area)

* Description: Defined a area in Extern Sheet.

* REFERENCE:

* @author Libin Roman (Vista Portal LDT. Developer) @@ -35,7 +35,6 @@ import org.apache.poi.util.LittleEndian; * @author Jason Height (jheight at chariot dot net dot au) * @version 1.0-pre */ - public class Area3DPtg extends Ptg implements AreaI { public final static byte sid = 0x3b; @@ -84,23 +83,15 @@ public class Area3DPtg extends Ptg implements AreaI setExternSheetIndex(externalSheetIndex); } - public String toString() - { - StringBuffer buffer = new StringBuffer(); - - buffer.append( "AreaPtg\n" ); - buffer.append( "Index to Extern Sheet = " + getExternSheetIndex() ).append( "\n" ); - buffer.append( "firstRow = " + getFirstRow() ).append( "\n" ); - buffer.append( "lastRow = " + getLastRow() ).append( "\n" ); - buffer.append( "firstCol = " + getFirstColumn() ).append( "\n" ); - buffer.append( "lastCol = " + getLastColumn() ).append( "\n" ); - buffer.append( "firstColRel= " - + isFirstRowRelative() ).append( "\n" ); - buffer.append( "lastColRowRel = " - + isLastRowRelative() ).append( "\n" ); - buffer.append( "firstColRel = " + isFirstColRelative() ).append( "\n" ); - buffer.append( "lastColRel = " + isLastColRelative() ).append( "\n" ); - return buffer.toString(); + public String toString() { + StringBuffer sb = new StringBuffer(); + sb.append(getClass().getName()); + sb.append(" ["); + sb.append("sheetIx=").append(getExternSheetIndex()); + sb.append(" ! "); + sb.append(AreaReference.formatAsString(this)); + sb.append("]"); + return sb.toString(); } public void writeBytes( byte[] array, int offset ) @@ -284,7 +275,7 @@ public class Area3DPtg extends Ptg implements AreaI } // Now the normal area bit - retval.append( AreaPtg.toFormulaString(this, book) ); + retval.append(AreaReference.formatAsString(this)); // All done return retval.toString(); @@ -326,6 +317,7 @@ public class Area3DPtg extends Ptg implements AreaI public int hashCode() { + // TODO - hashCode seems to be unused int result; result = (int) field_1_index_extern_sheet; result = 29 * result + (int) field_2_first_row; diff --git a/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java b/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java index 90be1974f0..969ab5f757 100644 --- a/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java @@ -114,23 +114,13 @@ public class AreaPtg extends Ptg implements AreaI { return "AreaPtg"; } - public String toString() - { - StringBuffer buffer = new StringBuffer(); - - buffer.append(getAreaPtgName()); - buffer.append("\n"); - buffer.append("firstRow = " + getFirstRow()).append("\n"); - buffer.append("lastRow = " + getLastRow()).append("\n"); - buffer.append("firstCol = " + getFirstColumn()).append("\n"); - buffer.append("lastCol = " + getLastColumn()).append("\n"); - buffer.append("firstColRowRel= " - + isFirstRowRelative()).append("\n"); - buffer.append("lastColRowRel = " - + isLastRowRelative()).append("\n"); - buffer.append("firstColRel = " + isFirstColRelative()).append("\n"); - buffer.append("lastColRel = " + isLastColRelative()).append("\n"); - return buffer.toString(); + public String toString() { + StringBuffer sb = new StringBuffer(); + sb.append(getClass().getName()); + sb.append(" ["); + sb.append(AreaReference.formatAsString(this)); + sb.append("]"); + return sb.toString(); } public void writeBytes(byte [] array, int offset) { @@ -307,19 +297,8 @@ public class AreaPtg extends Ptg implements AreaI { field_4_last_column = column; } - public String toFormulaString(HSSFWorkbook book) - { - return toFormulaString(this, book); - } - protected static String toFormulaString(AreaI area, HSSFWorkbook book) { - CellReference topLeft = new CellReference(area.getFirstRow(),area.getFirstColumn(),!area.isFirstRowRelative(),!area.isFirstColRelative()); - CellReference botRight = new CellReference(area.getLastRow(),area.getLastColumn(),!area.isLastRowRelative(),!area.isLastColRelative()); - - if(AreaReference.isWholeColumnReference(topLeft, botRight)) { - return (new AreaReference(topLeft, botRight)).formatAsString(); - } else { - return topLeft.formatAsString() + ":" + botRight.formatAsString(); - } + public String toFormulaString(HSSFWorkbook book) { + return AreaReference.formatAsString(this); } public byte getDefaultOperandClass() { diff --git a/src/java/org/apache/poi/hssf/util/AreaReference.java b/src/java/org/apache/poi/hssf/util/AreaReference.java index 3f6b321a6e..a10b9976aa 100644 --- a/src/java/org/apache/poi/hssf/util/AreaReference.java +++ b/src/java/org/apache/poi/hssf/util/AreaReference.java @@ -15,12 +15,13 @@ limitations under the License. ==================================================================== */ - package org.apache.poi.hssf.util; import java.util.ArrayList; import java.util.StringTokenizer; +import org.apache.poi.hssf.record.formula.AreaI; + public final class AreaReference { /** The character (!) that separates sheet names from cell references */ @@ -50,13 +51,13 @@ public final class AreaReference { // Special handling for whole-column references if(parts.length == 2 && parts[0].length() == 1 && - parts[1].length() == 1 && - parts[0].charAt(0) >= 'A' && parts[0].charAt(0) <= 'Z' && - parts[1].charAt(0) >= 'A' && parts[1].charAt(0) <= 'Z') { - // Represented internally as x$1 to x$65536 - // which is the maximum range of rows - parts[0] = parts[0] + "$1"; - parts[1] = parts[1] + "$65536"; + parts[1].length() == 1 && + parts[0].charAt(0) >= 'A' && parts[0].charAt(0) <= 'Z' && + parts[1].charAt(0) >= 'A' && parts[1].charAt(0) <= 'Z') { + // Represented internally as x$1 to x$65536 + // which is the maximum range of rows + parts[0] = parts[0] + "$1"; + parts[1] = parts[1] + "$65536"; } _firstCell = new CellReference(parts[0]); @@ -74,9 +75,9 @@ public final class AreaReference { * Creates an area ref from a pair of Cell References. */ public AreaReference(CellReference topLeft, CellReference botRight) { - _firstCell = topLeft; - _lastCell = botRight; - _isSingleCell = false; + _firstCell = topLeft; + _lastCell = botRight; + _isSingleCell = false; } /** @@ -98,17 +99,17 @@ public final class AreaReference { * such as C:C or D:G ? */ public static boolean isWholeColumnReference(CellReference topLeft, CellReference botRight) { - // These are represented as something like - // C$1:C$65535 or D$1:F$0 - // i.e. absolute from 1st row to 0th one - if(topLeft.getRow() == 0 && topLeft.isRowAbsolute() && - botRight.getRow() == 65535 && botRight.isRowAbsolute()) { - return true; - } - return false; + // These are represented as something like + // C$1:C$65535 or D$1:F$0 + // i.e. absolute from 1st row to 0th one + if(topLeft.getRow() == 0 && topLeft.isRowAbsolute() && + botRight.getRow() == 65535 && botRight.isRowAbsolute()) { + return true; + } + return false; } public boolean isWholeColumnReference() { - return isWholeColumnReference(_firstCell, _lastCell); + return isWholeColumnReference(_firstCell, _lastCell); } /** @@ -155,26 +156,26 @@ public final class AreaReference { * Returns a reference to every cell covered by this area */ public CellReference[] getAllReferencedCells() { - // Special case for single cell reference - if(_isSingleCell) { - return new CellReference[] { _firstCell, }; - } + // Special case for single cell reference + if(_isSingleCell) { + return new CellReference[] { _firstCell, }; + } - // Interpolate between the two + // Interpolate between the two int minRow = Math.min(_firstCell.getRow(), _lastCell.getRow()); - int maxRow = Math.max(_firstCell.getRow(), _lastCell.getRow()); - int minCol = Math.min(_firstCell.getCol(), _lastCell.getCol()); - int maxCol = Math.max(_firstCell.getCol(), _lastCell.getCol()); + int maxRow = Math.max(_firstCell.getRow(), _lastCell.getRow()); + int minCol = Math.min(_firstCell.getCol(), _lastCell.getCol()); + int maxCol = Math.max(_firstCell.getCol(), _lastCell.getCol()); String sheetName = _firstCell.getSheetName(); - - ArrayList refs = new ArrayList(); - for(int row=minRow; row<=maxRow; row++) { - for(int col=minCol; col<=maxCol; col++) { - CellReference ref = new CellReference(sheetName, row, col, _firstCell.isRowAbsolute(), _firstCell.isColAbsolute()); - refs.add(ref); - } - } - return (CellReference[])refs.toArray(new CellReference[refs.size()]); + + ArrayList refs = new ArrayList(); + for(int row=minRow; row<=maxRow; row++) { + for(int col=minCol; col<=maxCol; col++) { + CellReference ref = new CellReference(sheetName, row, col, _firstCell.isRowAbsolute(), _firstCell.isColAbsolute()); + refs.add(ref); + } + } + return (CellReference[])refs.toArray(new CellReference[refs.size()]); } /** @@ -189,14 +190,14 @@ public final class AreaReference { * @return the text representation of this area reference as it would appear in a formula. */ public String formatAsString() { - // Special handling for whole-column references - if(isWholeColumnReference()) { - return - CellReference.convertNumToColString(_firstCell.getCol()) - + ":" + - CellReference.convertNumToColString(_lastCell.getCol()); - } - + // Special handling for whole-column references + if(isWholeColumnReference()) { + return + CellReference.convertNumToColString(_firstCell.getCol()) + + ":" + + CellReference.convertNumToColString(_lastCell.getCol()); + } + StringBuffer sb = new StringBuffer(32); sb.append(_firstCell.formatAsString()); if(!_isSingleCell) { @@ -210,6 +211,18 @@ public final class AreaReference { } return sb.toString(); } + /** + * Formats a 2-D area as it would appear in a formula. See formatAsString() (no-arg) + */ + public static String formatAsString(AreaI area) { + CellReference topLeft = new CellReference(area.getFirstRow(),area.getFirstColumn(),!area.isFirstRowRelative(),!area.isFirstColRelative()); + CellReference botRight = new CellReference(area.getLastRow(),area.getLastColumn(),!area.isLastRowRelative(),!area.isLastColRelative()); + + if(isWholeColumnReference(topLeft, botRight)) { + return (new AreaReference(topLeft, botRight)).formatAsString(); + } + return topLeft.formatAsString() + ":" + botRight.formatAsString(); + } public String toString() { StringBuffer sb = new StringBuffer(64); sb.append(getClass().getName()).append(" [");