]> source.dussan.org Git - poi.git/commitdiff
improved toString and refactored toFormulaString on Area(3D)Ptg
authorJosh Micich <josh@apache.org>
Wed, 21 May 2008 19:57:40 +0000 (19:57 +0000)
committerJosh Micich <josh@apache.org>
Wed, 21 May 2008 19:57:40 +0000 (19:57 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@658833 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java
src/java/org/apache/poi/hssf/record/formula/AreaPtg.java
src/java/org/apache/poi/hssf/util/AreaReference.java

index b0322ab7851728f65e2f115098d02bb43e5890d8..f2b801f6900ea4df2fc4397eb59b5530674ed769 100644 (file)
@@ -27,7 +27,7 @@ import org.apache.poi.util.LittleEndian;
 
 
 /**
- * Title:        Area 3D Ptg - 3D referecnce (Sheet + Area)<P>
+ * Title:        Area 3D Ptg - 3D reference (Sheet + Area)<P>
  * Description:  Defined a area in Extern Sheet. <P>
  * REFERENCE:  <P>
  * @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;
index 90be1974f026caf5df6912d650cc4ca0b9786a2e..969ab5f757b67d12ea8e750bae5fa222fdc4ea61 100644 (file)
@@ -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() {
index 3f6b321a6e5fe8711cc13d3dfda7a314847584b5..a10b9976aa50e19fcb037b56bcaaf055754743fa 100644 (file)
    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(" [");