You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@poi.apache.org by av...@apache.org on 2003/08/23 21:40:05 UTC

cvs commit: jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel TestFormulas.java

avik        2003/08/23 12:40:05

  Modified:    src/java/org/apache/poi/hssf/dev Tag: REL_2_BRANCH
                        FormulaViewer.java
               src/java/org/apache/poi/hssf/model Tag: REL_2_BRANCH
                        FormulaParser.java
               src/java/org/apache/poi/hssf/record Tag: REL_2_BRANCH
                        NameRecord.java
               src/java/org/apache/poi/hssf/record/formula Tag:
                        REL_2_BRANCH AbstractFunctionPtg.java AddPtg.java
                        Area3DPtg.java AreaPtg.java AttrPtg.java
                        BoolPtg.java ConcatPtg.java DividePtg.java
                        EqualPtg.java ExpPtg.java GreaterEqualPtg.java
                        GreaterThanPtg.java IntPtg.java LessEqualPtg.java
                        LessThanPtg.java MemErrPtg.java MemFuncPtg.java
                        MissingArgPtg.java MultiplyPtg.java NamePtg.java
                        NameXPtg.java NotEqualPtg.java NumberPtg.java
                        ParenthesisPtg.java PowerPtg.java Ptg.java
                        Ref3DPtg.java ReferencePtg.java StringPtg.java
                        SubtractPtg.java UnaryMinusPtg.java
                        UnaryPlusPtg.java UnionPtg.java UnknownPtg.java
               src/java/org/apache/poi/hssf/usermodel Tag: REL_2_BRANCH
                        HSSFCell.java HSSFName.java HSSFWorkbook.java
               src/testcases/org/apache/poi/hssf/model Tag: REL_2_BRANCH
                        TestFormulaParser.java
               src/testcases/org/apache/poi/hssf/usermodel Tag:
                        REL_2_BRANCH TestFormulas.java
  Log:
  Facility to use Macro functions in formulas.
  Major functionality upgrade, thanks to Paul Krause
  Some of the Named Range and Area3d functionality can now be enhanced using the features of this patch.
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.7.2.1   +3 -4      jakarta-poi/src/java/org/apache/poi/hssf/dev/FormulaViewer.java
  
  Index: FormulaViewer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/dev/FormulaViewer.java,v
  retrieving revision 1.7
  retrieving revision 1.7.2.1
  diff -u -r1.7 -r1.7.2.1
  --- FormulaViewer.java	30 Apr 2003 04:39:11 -0000	1.7
  +++ FormulaViewer.java	23 Aug 2003 19:40:04 -0000	1.7.2.1
  @@ -77,7 +77,6 @@
   import org.apache.poi.hssf.record.formula.*;
   import org.apache.poi.hssf.model.*;
   import org.apache.poi.hssf.usermodel.*;
  -import org.apache.poi.hssf.util.SheetReferences;
   
   /**
    * FormulaViewer - finds formulas in a BIFF8 file and attempts to read them/display
  @@ -144,7 +143,7 @@
               StringBuffer buf = new StringBuffer();
               
               if (token instanceof ExpPtg) return;
  -            buf.append(name=((OperationPtg) token).toFormulaString((SheetReferences)null));
  +            buf.append(name=((OperationPtg) token).toFormulaString((Workbook)null));
               buf.append(sep);
               switch (token.getPtgClass()) {
                   case Ptg.CLASS_REF :
  @@ -213,7 +212,7 @@
           StringBuffer buf = new StringBuffer();
              for (int i=0;i<numptgs;i++) {
              token = (Ptg) tokens.get(i);
  -            buf.append( token.toFormulaString((SheetReferences)null));
  +            buf.append( token.toFormulaString((Workbook)null));
               switch (token.getPtgClass()) {
                   case Ptg.CLASS_REF :
                       buf.append("(R)");
  @@ -233,7 +232,7 @@
       
       private String composeFormula(FormulaRecord record)
       {
  -       return  org.apache.poi.hssf.model.FormulaParser.toFormulaString((SheetReferences)null,record.getParsedExpression());
  +       return  org.apache.poi.hssf.model.FormulaParser.toFormulaString((Workbook)null,record.getParsedExpression());
       }
   
       /**
  
  
  
  No                   revision
  No                   revision
  1.13.2.1  +62 -45    jakarta-poi/src/java/org/apache/poi/hssf/model/FormulaParser.java
  
  Index: FormulaParser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/model/FormulaParser.java,v
  retrieving revision 1.13
  retrieving revision 1.13.2.1
  diff -u -r1.13 -r1.13.2.1
  --- FormulaParser.java	7 May 2003 03:40:52 -0000	1.13
  +++ FormulaParser.java	23 Aug 2003 19:40:04 -0000	1.13.2.1
  @@ -64,7 +64,6 @@
   //import PTG's .. since we need everything, import *
   import org.apache.poi.hssf.record.formula.*;
   
  -import org.apache.poi.hssf.util.SheetReferences;
   
   
   /**
  @@ -335,10 +334,14 @@
           int numArgs = Arguments();
           Match(')');
                   
  -        Ptg functionPtg = getFunction(name,(byte)numArgs);
  +        AbstractFunctionPtg functionPtg = getFunction(name,(byte)numArgs);
           
   		tokens.add(functionPtg);
    
  +        if (functionPtg.getName().equals("externalflag")) {
  +            tokens.add(new NamePtg(name, this.book));
  +        }
  +
    		//remove what we just put in
   		this.functionTokens.remove(0);
       }
  @@ -382,8 +385,8 @@
        * @param numArgs
        * @return Ptg a null is returned if we're in an IF formula, it needs extreme manipulation and is handled in this function
        */
  -    private Ptg getFunction(String name,byte numArgs) {
  -        Ptg retval = null;
  +    private AbstractFunctionPtg getFunction(String name, byte numArgs) {
  +        AbstractFunctionPtg retval = null;
           
           if (name.equals("IF")) {
               retval = new FuncVarPtg(AbstractFunctionPtg.ATTR_NAME, numArgs);
  @@ -795,69 +798,85 @@
       /**
        * Convience method which takes in a list then passes it to the other toFormulaString
        * signature. 
  -     * @param lptgs - list of ptgs, can be null
  +     * @param book   workbook for 3D and named references
  +     * @param lptgs  list of Ptg, can be null or empty
  +     * @return a human readable String
        */
  -    public static String toFormulaString(SheetReferences refs, List lptgs) {
  +    public static String toFormulaString(Workbook book, List lptgs) {
           String retval = null;
           if (lptgs == null || lptgs.size() == 0) return "#NAME";
           Ptg[] ptgs = new Ptg[lptgs.size()];
           ptgs = (Ptg[])lptgs.toArray(ptgs);
  -        retval = toFormulaString(refs, ptgs);
  +        retval = toFormulaString(book, ptgs);
           return retval;
       }
       
  -    /** Static method to convert an array of Ptgs in RPN order 
  -     *  to a human readable string format in infix mode
  -     *  @param ptgs - array of ptgs, can be null or empty
  +    /**
  +     * Static method to convert an array of Ptgs in RPN order
  +     * to a human readable string format in infix mode.
  +     * @param book  workbook for named and 3D references
  +     * @param ptgs  array of Ptg, can be null or empty
  +     * @return a human readable String
        */
  -    public static String toFormulaString(SheetReferences refs, Ptg[] ptgs) {
  +    public static String toFormulaString(Workbook book, Ptg[] ptgs) {
           if (ptgs == null || ptgs.length == 0) return "#NAME";
           java.util.Stack stack = new java.util.Stack();
  -        int numPtgs = ptgs.length;
  -        OperationPtg o;
  -        int numOperands;
  -        String result=null;
  -        String[] operands;
           AttrPtg ifptg = null;
  -        for (int i=0;i<numPtgs;i++) {
  +
              // Excel allows to have AttrPtg at position 0 (such as Blanks) which
              // do not have any operands. Skip them.
  -            if (ptgs[i] instanceof OperationPtg && i>0) {
  -                  o = (OperationPtg) ptgs[i];
  +        stack.push(ptgs[0].toFormulaString(book));
                     
  -                  if (o instanceof AttrPtg && ((AttrPtg)o).isOptimizedIf()) {
  -                        ifptg=(AttrPtg)o;
  -                  } else {
  +        for (int i = 1; i < ptgs.length; i++) {
  +            if (! (ptgs[i] instanceof OperationPtg)) {
  +                stack.push(ptgs[i].toFormulaString(book));
  +                continue;
  +            }
                         
  -                      numOperands = o.getNumberOfOperands();
  -                      operands = new String[numOperands];
  +            if (ptgs[i] instanceof AttrPtg && ((AttrPtg) ptgs[i]).isOptimizedIf()) {
  +                ifptg = (AttrPtg) ptgs[i];
  +                continue;
  +            }
                         
  -                      for (int j=0;j<numOperands;j++) {
  -                          operands[numOperands-j-1] = (String) stack.pop(); //TODO: catch stack underflow and throw parse exception. 
  +            final OperationPtg o = (OperationPtg) ptgs[i];
  +            final String[] operands = new String[o.getNumberOfOperands()];
  +
  +            for (int j = operands.length; j > 0; j--) {
  +                //TODO: catch stack underflow and throw parse exception.
  +                operands[j - 1] = (String) stack.pop();
                         }  
   
  -                      if ( (o instanceof AbstractFunctionPtg) && 
  -                            ((AbstractFunctionPtg)o).getName().equals("specialflag") &&
  -                            ifptg != null
  -                            ) {
  +            stack.push(o.toFormulaString(operands));
  +            if (!(o instanceof AbstractFunctionPtg)) continue;
  +
  +            final AbstractFunctionPtg f = (AbstractFunctionPtg) o;
  +            final String fname = f.getName();
  +            if (fname == null) continue;
  +
  +            if ((ifptg != null) && (fname.equals("specialflag"))) {
                                // this special case will be way different.
  -                             result = ifptg.toFormulaString(
  -                                  new String[] {(o.toFormulaString(operands))}
  -                                                           );
  -                             ifptg = null;
  -                      } else {                      
  -                        result = o.toFormulaString(operands);                                              
  +                stack.push(ifptg.toFormulaString(new String[]{(String) stack.pop()}));
  +                continue;
                         }
  -                      stack.push(result);                                        
  +            if (fname.equals("externalflag")) {
  +                final String top = (String) stack.pop();
  +                final int paren = top.indexOf('(');
  +                final int comma = top.indexOf(',');
  +                if (comma == -1) {
  +                    final int rparen = top.indexOf(')');
  +                    stack.push(top.substring(paren + 1, rparen) + "()");
                     }
  -                      
  -                  
  -            } else {
  -                stack.push(ptgs[i].toFormulaString(refs));
  +                else {
  +                    stack.push(top.substring(paren + 1, comma) + '(' +
  +                               top.substring(comma + 1));
               }
           }
  -        return (String) stack.pop(); //TODO: catch stack underflow and throw parse exception. 
       }
  +        // TODO: catch stack underflow and throw parse exception.
  +        return (String) stack.pop();
  +    }
  +
  +
       /** Create a tree representation of the RPN token array
        *used to run the class(RVA) change algo
        */
  @@ -890,11 +909,9 @@
        *   Useful for testing
        */
       public String toString() {
  -        SheetReferences refs = null;
  -        if (book!=null)  book.getSheetReferences();
           StringBuffer buf = new StringBuffer();
              for (int i=0;i<tokens.size();i++) {
  -            buf.append( ( (Ptg)tokens.get(i)).toFormulaString(refs));
  +            buf.append( ( (Ptg)tokens.get(i)).toFormulaString(book));
               buf.append(' ');
           } 
           return buf.toString();
  
  
  
  No                   revision
  No                   revision
  1.12.2.2  +62 -9     jakarta-poi/src/java/org/apache/poi/hssf/record/NameRecord.java
  
  Index: NameRecord.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/NameRecord.java,v
  retrieving revision 1.12.2.1
  retrieving revision 1.12.2.2
  diff -u -r1.12.2.1 -r1.12.2.2
  --- NameRecord.java	25 Jul 2003 18:22:19 -0000	1.12.2.1
  +++ NameRecord.java	23 Aug 2003 19:40:04 -0000	1.12.2.2
  @@ -58,11 +58,11 @@
   import java.util.List;
   import java.util.Stack;
   
  +import org.apache.poi.hssf.model.Workbook;
   import org.apache.poi.hssf.record.formula.Area3DPtg;
   import org.apache.poi.hssf.record.formula.Ptg;
   import org.apache.poi.hssf.record.formula.Ref3DPtg;
   import org.apache.poi.hssf.util.RangeAddress;
  -import org.apache.poi.hssf.util.SheetReferences;
   import org.apache.poi.util.HexDump;
   import org.apache.poi.util.LittleEndian;
   import org.apache.poi.util.StringUtil;
  @@ -127,6 +127,14 @@
   	 */
   	public final static byte  BUILTIN_SHEET_TITLE           = (byte)12;
       
  +    public static final short OPT_HIDDEN_NAME =   (short) 0x0001;
  +    public static final short OPT_FUNCTION_NAME = (short) 0x0002;
  +    public static final short OPT_COMMAND_NAME =  (short) 0x0004;
  +    public static final short OPT_MACRO =         (short) 0x0008;
  +    public static final short OPT_COMPLEX =       (short) 0x0010;
  +    public static final short OPT_BUILTIN =       (short) 0x0020;
  +    public static final short OPT_BINDATA =       (short) 0x1000;
  +
       
       private short             field_1_option_flag;
       private byte              field_2_keyboard_shortcut;
  @@ -192,7 +200,7 @@
   	{
   	    this();	    
   	    this.field_12_builtIn_name = builtin;
  -	    this.setOptionFlag((short)(this.getOptionFlag() | (short)0x20));
  +	    this.setOptionFlag((short)(this.getOptionFlag() | OPT_BUILTIN));
   	    this.setNameTextLength((byte)1);
   	    this.setEqualsToIndexToSheet(index); //the extern sheets are set through references
   	    
  @@ -252,13 +260,22 @@
   
   	/**
   	 * Convenience method to retrieve the index the name refers to.
  -	 * @see getEqualsToIndexToSheet()
  +	 * @see #getEqualsToIndexToSheet()
   	 * @return short
   	 */
   	public short getIndexToSheet() {
   		return getEqualsToIndexToSheet();
   	}
   
  +    /**
  +     * @return function group
  +     * @see FnGroupCountRecord
  +     */
  +    public byte getFnGroup() {
  +        int masked = field_1_option_flag & 0x0fc0;
  +        return (byte) (masked >> 4);
  +    }
  +
       public void setEqualsToIndexToSheet(short value)
       {
           field_6_equals_to_index_to_sheet = value;
  @@ -409,11 +426,47 @@
           return field_11_compressed_unicode_flag;
       }
   
  +    /**
  +     * @return true if name is hidden
  +     */
  +    public boolean isHiddenName() {
  +        return (field_1_option_flag & OPT_HIDDEN_NAME) != 0;
  +    }
  +
  +    /**
  +     * @return true if name is a function
  +     */
  +    public boolean isFunctionName() {
  +        return (field_1_option_flag & OPT_FUNCTION_NAME) != 0;
  +    }
  +
  +    /**
  +     * @return true if name is a command
  +     */
  +    public boolean isCommandName() {
  +        return (field_1_option_flag & OPT_COMMAND_NAME) != 0;
  +    }
  +
  +    /**
  +     * @return true if function macro or command macro
  +     */
  +    public boolean isMacro() {
  +        return (field_1_option_flag & OPT_MACRO) != 0;
  +    }
  +
  +    /**
  +     * @return true if array formula or user defined
  +     */
  +    public boolean isComplexFunction() {
  +        return (field_1_option_flag & OPT_COMPLEX) != 0;
  +    }
  +
  +
   	/**Convenience Function to determine if the name is a built-in name
   	 */
   	public boolean isBuiltInName()
   	{
  -	    return ((this.getOptionFlag() & (short)0x20) != 0);
  +	    return ((this.getOptionFlag() & OPT_BUILTIN) != 0);
   	}
   
   
  @@ -511,7 +564,7 @@
           data[18 + offset] = getCompressedUnicodeFlag();
   
           /* temp: gjs
  -        if ( ( field_1_option_flag & (short) 0x20 ) != 0 )
  +        if (isBuiltInName())
           {
               LittleEndian.putShort( data, 2 + offset, (short) ( 16 + field_13_raw_name_definition.length ) );
   
  @@ -647,16 +700,16 @@
       /** gets the reference , the area only (range)
        * @return area reference
        */
  -    public String getAreaReference(SheetReferences refs){
  +    public String getAreaReference(Workbook book){
           if (field_13_name_definition == null) return "#REF!";
           Ptg ptg = (Ptg) field_13_name_definition.peek();
           String result = "";
   
           if (ptg.getClass() == Area3DPtg.class){
  -            result = ptg.toFormulaString(refs);
  +            result = ptg.toFormulaString(book);
   
           } else if (ptg.getClass() == Ref3DPtg.class){
  -            result = ptg.toFormulaString(refs);
  +            result = ptg.toFormulaString(book);
           }
   
           return result;
  @@ -727,7 +780,7 @@
   
           /*
           temp: gjs
  -        if ( ( field_1_option_flag & (short)0x20 ) != 0 ) {
  +        if (isBuiltInName()) {
               // DEBUG
               // System.out.println( "Built-in name" );
   
  
  
  
  No                   revision
  No                   revision
  1.10.2.1  +7 -5      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/AbstractFunctionPtg.java
  
  Index: AbstractFunctionPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/AbstractFunctionPtg.java,v
  retrieving revision 1.10
  retrieving revision 1.10.2.1
  diff -u -r1.10 -r1.10.2.1
  --- AbstractFunctionPtg.java	6 May 2003 15:30:52 -0000	1.10
  +++ AbstractFunctionPtg.java	23 Aug 2003 19:40:04 -0000	1.10.2.1
  @@ -54,9 +54,8 @@
   package org.apache.poi.hssf.record.formula;
   
   import org.apache.poi.util.BinaryTree;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
  -import java.util.Stack;
   
   /**
    * This class provides the base functionality for Excel sheet functions 
  @@ -69,7 +68,7 @@
   	//constant used allow a ptgAttr to be mapped properly for its functionPtg
   	public static final String ATTR_NAME = "specialflag";
   	    
  -      
  +    public static final short INDEX_EXTERNAL = 255;
       
       private static BinaryTree map = produceHash(); 
       protected static Object[][] functionData = produceFunctionData();
  @@ -104,7 +103,7 @@
           return lookupName(field_2_fnc_index);
       }
       
  -    public String toFormulaString(SheetReferences refs) {
  +    public String toFormulaString(Workbook book) {
           return getName();
       }
       
  @@ -140,7 +139,9 @@
       }
       
       protected short lookupIndex(String name) {
  -        return (short)((Integer)map.getKeyForValue(name)).intValue();
  +        Integer index = (Integer) map.getKeyForValue(name);
  +        if (index != null) return index.shortValue();
  +        return INDEX_EXTERNAL;
       }
       
       /**
  @@ -389,6 +390,7 @@
           dmap.put(new Integer(252),"FREQUENCY");
           dmap.put(new Integer(253),"ADDTOOLBAR");
           dmap.put(new Integer(254),"DELETETOOLBAR");
  +        dmap.put(new Integer(255),"externalflag");
           dmap.put(new Integer(256),"RESETTOOLBAR");
           dmap.put(new Integer(257),"EVALUATE");
           dmap.put(new Integer(258),"GETTOOLBAR");
  
  
  
  1.13.2.1  +2 -2      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/AddPtg.java
  
  Index: AddPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/AddPtg.java,v
  retrieving revision 1.13
  retrieving revision 1.13.2.1
  diff -u -r1.13 -r1.13.2.1
  --- AddPtg.java	30 Apr 2003 04:39:02 -0000	1.13
  +++ AddPtg.java	23 Aug 2003 19:40:04 -0000	1.13.2.1
  @@ -62,7 +62,7 @@
   
   import java.util.List;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Addition operator PTG the "+" binomial operator.  If you need more 
  @@ -113,7 +113,7 @@
       }
       
       /** Implementation of method from Ptg */
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "+";
       }
  
  
  
  1.13.2.2  +2 -2      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java
  
  Index: Area3DPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java,v
  retrieving revision 1.13.2.1
  retrieving revision 1.13.2.2
  diff -u -r1.13.2.1 -r1.13.2.2
  --- Area3DPtg.java	1 Jul 2003 14:47:34 -0000	1.13.2.1
  +++ Area3DPtg.java	23 Aug 2003 19:40:04 -0000	1.13.2.2
  @@ -291,8 +291,9 @@
   
   	}
   
  -	public String toFormulaString( SheetReferences refs )
  +	public String toFormulaString(Workbook book)
   	{
  +		SheetReferences refs = book == null ? null : book.getSheetReferences();
   		StringBuffer retval = new StringBuffer();
   		if ( refs != null )
   		{
  @@ -352,4 +353,3 @@
   
   
   }
  -
  
  
  
  1.14.2.2  +2 -2      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java
  
  Index: AreaPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java,v
  retrieving revision 1.14.2.1
  retrieving revision 1.14.2.2
  diff -u -r1.14.2.1 -r1.14.2.2
  --- AreaPtg.java	1 Jul 2003 14:47:34 -0000	1.14.2.1
  +++ AreaPtg.java	23 Aug 2003 19:40:04 -0000	1.14.2.2
  @@ -65,7 +65,7 @@
   
   import org.apache.poi.hssf.util.AreaReference;
   import org.apache.poi.hssf.util.CellReference;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Specifies a rectangular area of cells A1:A4 for instance.
  @@ -305,7 +305,7 @@
           field_4_last_column = column;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
            return (new CellReference(getFirstRow(),getFirstColumn(),!isFirstRowRelative(),!isFirstColRelative())).toString() + ":" +
                   (new CellReference(getLastRow(),getLastColumn(),!isLastRowRelative(),!isLastColRelative())).toString();
  
  
  
  1.16.2.1  +5 -5      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/AttrPtg.java
  
  Index: AttrPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/AttrPtg.java,v
  retrieving revision 1.16
  retrieving revision 1.16.2.1
  diff -u -r1.16 -r1.16.2.1
  --- AttrPtg.java	30 Apr 2003 04:39:02 -0000	1.16
  +++ AttrPtg.java	23 Aug 2003 19:40:04 -0000	1.16.2.1
  @@ -60,7 +60,7 @@
    */
   package org.apache.poi.hssf.record.formula;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   import org.apache.poi.util.LittleEndian;
   import org.apache.poi.util.BitField;
  @@ -207,11 +207,11 @@
           if(space.isSet(field_1_options)) {
               return operands[ 0 ];
           } else if (optiIf.isSet(field_1_options)) {
  -            return toFormulaString((SheetReferences)null) + "(" + operands[ 0 ]             +")"; 
  +            return toFormulaString((Workbook)null) + "(" + operands[ 0 ]             +")";
           } else if (optGoto.isSet(field_1_options)) {
  -            return toFormulaString((SheetReferences)null) + operands[0];   //goto isn't a real formula element should not show up
  +            return toFormulaString((Workbook)null) + operands[0];   //goto isn't a real formula element should not show up
           } else {
  -            return toFormulaString((SheetReferences)null) + "(" + operands[ 0 ] + ")";
  +            return toFormulaString((Workbook)null) + "(" + operands[ 0 ] + ")";
           }
       }
     
  @@ -226,7 +226,7 @@
           return -1;
       }
           
  -   public String toFormulaString(SheetReferences refs) {
  +   public String toFormulaString(Workbook book) {
         if(semiVolatile.isSet(field_1_options)) {
           return "ATTR(semiVolatile)";
         }
  
  
  
  1.3.2.1   +2 -2      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/BoolPtg.java
  
  Index: BoolPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/BoolPtg.java,v
  retrieving revision 1.3
  retrieving revision 1.3.2.1
  diff -u -r1.3 -r1.3.2.1
  --- BoolPtg.java	1 May 2003 12:43:37 -0000	1.3
  +++ BoolPtg.java	23 Aug 2003 19:40:04 -0000	1.3.2.1
  @@ -60,7 +60,7 @@
   package org.apache.poi.hssf.record.formula;
   
   import org.apache.poi.util.LittleEndian;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Boolean (boolean)
  @@ -114,7 +114,7 @@
           return SIZE;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return field_1_value ? "TRUE" : "FALSE";
       }
  
  
  
  1.5.2.1   +2 -2      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/ConcatPtg.java
  
  Index: ConcatPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/ConcatPtg.java,v
  retrieving revision 1.5
  retrieving revision 1.5.2.1
  diff -u -r1.5 -r1.5.2.1
  --- ConcatPtg.java	30 Apr 2003 04:39:02 -0000	1.5
  +++ ConcatPtg.java	23 Aug 2003 19:40:04 -0000	1.5.2.1
  @@ -62,7 +62,7 @@
   
   import java.util.List;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    *
  @@ -108,7 +108,7 @@
           return 2;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return CONCAT;
       }    
  
  
  
  1.9.2.1   +3 -3      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/DividePtg.java
  
  Index: DividePtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/DividePtg.java,v
  retrieving revision 1.9
  retrieving revision 1.9.2.1
  diff -u -r1.9 -r1.9.2.1
  --- DividePtg.java	30 Apr 2003 04:39:02 -0000	1.9
  +++ DividePtg.java	23 Aug 2003 19:40:04 -0000	1.9.2.1
  @@ -62,7 +62,7 @@
   
   import java.util.List;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * This PTG implements the standard binomial divide "/"
  @@ -108,7 +108,7 @@
           return 2;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "/";
       }
  @@ -117,7 +117,7 @@
           StringBuffer buffer = new StringBuffer();
   
           buffer.append(operands[ 0 ]);
  -        buffer.append(toFormulaString((SheetReferences)null));
  +        buffer.append(toFormulaString((Workbook)null));
           buffer.append(operands[ 1 ]);
           return buffer.toString();
       }      
  
  
  
  1.3.2.1   +3 -3      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/EqualPtg.java
  
  Index: EqualPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/EqualPtg.java,v
  retrieving revision 1.3
  retrieving revision 1.3.2.1
  diff -u -r1.3 -r1.3.2.1
  --- EqualPtg.java	30 Apr 2003 04:39:02 -0000	1.3
  +++ EqualPtg.java	23 Aug 2003 19:40:04 -0000	1.3.2.1
  @@ -62,7 +62,7 @@
   
   import java.util.List;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    *
  @@ -107,7 +107,7 @@
           return 2;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "=";
       }
  @@ -117,7 +117,7 @@
   
           
           buffer.append(operands[ 0 ]);
  -        buffer.append(toFormulaString((SheetReferences)null));
  +        buffer.append(toFormulaString((Workbook)null));
           buffer.append(operands[ 1 ]);
           return buffer.toString();
       }       
  
  
  
  1.7.2.2   +2 -2      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/ExpPtg.java
  
  Index: ExpPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/ExpPtg.java,v
  retrieving revision 1.7.2.1
  retrieving revision 1.7.2.2
  diff -u -r1.7.2.1 -r1.7.2.2
  --- ExpPtg.java	28 Jun 2003 00:21:47 -0000	1.7.2.1
  +++ ExpPtg.java	23 Aug 2003 19:40:04 -0000	1.7.2.2
  @@ -60,7 +60,7 @@
    */
   package org.apache.poi.hssf.record.formula;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    *
  @@ -102,7 +102,7 @@
           return SIZE;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "NO IDEA SHARED FORMULA EXP PTG";
       }
  
  
  
  1.1.2.2   +3 -3      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/GreaterEqualPtg.java
  
  Index: GreaterEqualPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/GreaterEqualPtg.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- GreaterEqualPtg.java	31 Jul 2003 17:55:09 -0000	1.1.2.1
  +++ GreaterEqualPtg.java	23 Aug 2003 19:40:04 -0000	1.1.2.2
  @@ -54,7 +54,7 @@
   package org.apache.poi.hssf.record.formula;
   
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * PTG class to implement greater or equal to
  @@ -98,7 +98,7 @@
           return 2;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return ">=";
       }
  @@ -108,7 +108,7 @@
   
           
           buffer.append(operands[ 0 ]);
  -        buffer.append(toFormulaString((SheetReferences)null));
  +        buffer.append(toFormulaString((Workbook)null));
           buffer.append(operands[ 1 ]);
           return buffer.toString();
       }       
  
  
  
  1.1.2.1   +2 -4      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/GreaterThanPtg.java
  
  Index: GreaterThanPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/GreaterThanPtg.java,v
  retrieving revision 1.1
  retrieving revision 1.1.2.1
  diff -u -r1.1 -r1.1.2.1
  --- GreaterThanPtg.java	4 May 2003 18:22:08 -0000	1.1
  +++ GreaterThanPtg.java	23 Aug 2003 19:40:04 -0000	1.1.2.1
  @@ -61,7 +61,7 @@
   
   import java.util.List;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Greater than operator PTG ">"
  @@ -133,7 +133,7 @@
        * Implementation of method from Ptg 
        * @param refs the Sheet References
        */
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return this.GREATERTHAN;
       }
  @@ -171,5 +171,3 @@
           return new GreaterThanPtg();
       }
   }
  -
  -
  
  
  
  1.10.2.1  +2 -2      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/IntPtg.java
  
  Index: IntPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/IntPtg.java,v
  retrieving revision 1.10
  retrieving revision 1.10.2.1
  diff -u -r1.10 -r1.10.2.1
  --- IntPtg.java	30 Apr 2003 04:39:02 -0000	1.10
  +++ IntPtg.java	23 Aug 2003 19:40:04 -0000	1.10.2.1
  @@ -61,7 +61,7 @@
   package org.apache.poi.hssf.record.formula;
   
   import org.apache.poi.util.LittleEndian;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Integer (short intger)
  @@ -116,7 +116,7 @@
           return SIZE;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "" + getValue();
       }
  
  
  
  1.1.2.2   +3 -3      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/LessEqualPtg.java
  
  Index: LessEqualPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/LessEqualPtg.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- LessEqualPtg.java	31 Jul 2003 17:55:09 -0000	1.1.2.1
  +++ LessEqualPtg.java	23 Aug 2003 19:40:04 -0000	1.1.2.2
  @@ -53,7 +53,7 @@
    */
   package org.apache.poi.hssf.record.formula;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   
   /**
  @@ -99,7 +99,7 @@
   		  return 2;
   	 }
   
  -	 public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
   	 {
   		  return "<=";
   	 }
  @@ -109,7 +109,7 @@
   
           
   		  buffer.append(operands[ 0 ]);
  -		  buffer.append(toFormulaString((SheetReferences)null));
  +		  buffer.append(toFormulaString((Workbook)null));
   		  buffer.append(operands[ 1 ]);
   		  return buffer.toString();
   	 }       
  
  
  
  1.1.2.1   +2 -5      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/LessThanPtg.java
  
  Index: LessThanPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/LessThanPtg.java,v
  retrieving revision 1.1
  retrieving revision 1.1.2.1
  diff -u -r1.1 -r1.1.2.1
  --- LessThanPtg.java	4 May 2003 18:22:08 -0000	1.1
  +++ LessThanPtg.java	23 Aug 2003 19:40:04 -0000	1.1.2.1
  @@ -63,7 +63,7 @@
   import java.util.List;
   
   //POI
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Less than operator PTG "<". The SID is taken from the 
  @@ -142,7 +142,7 @@
        * Implementation of method from Ptg 
        * @param refs the Sheet References
        */
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return this.LESSTHAN;
       }
  @@ -180,6 +180,3 @@
       }
   
   }
  -
  -
  -
  
  
  
  1.5.2.1   +2 -2      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/MemErrPtg.java
  
  Index: MemErrPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/MemErrPtg.java,v
  retrieving revision 1.5
  retrieving revision 1.5.2.1
  diff -u -r1.5 -r1.5.2.1
  --- MemErrPtg.java	30 Apr 2003 04:39:02 -0000	1.5
  +++ MemErrPtg.java	23 Aug 2003 19:40:04 -0000	1.5.2.1
  @@ -61,7 +61,7 @@
   package org.apache.poi.hssf.record.formula;
   
   import org.apache.poi.util.LittleEndian;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    *
  @@ -118,7 +118,7 @@
           return SIZE;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "ERR#";
       }
  
  
  
  1.2.2.1   +2 -2      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/MemFuncPtg.java
  
  Index: MemFuncPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/MemFuncPtg.java,v
  retrieving revision 1.2
  retrieving revision 1.2.2.1
  diff -u -r1.2 -r1.2.2.1
  --- MemFuncPtg.java	30 Apr 2003 04:39:02 -0000	1.2
  +++ MemFuncPtg.java	23 Aug 2003 19:40:04 -0000	1.2.2.1
  @@ -60,7 +60,7 @@
   package org.apache.poi.hssf.record.formula;
   
   import org.apache.poi.util.LittleEndian;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * @author Glen Stampoultzis (glens at apache.org)
  @@ -96,7 +96,7 @@
           LittleEndian.putShort( array, offset + 1, (short)field_1_len_ref_subexpression );
       }
   
  -    public String toFormulaString( SheetReferences refs )
  +    public String toFormulaString(Workbook book)
       {
           return "";
       }
  
  
  
  1.4.2.1   +2 -4      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/MissingArgPtg.java
  
  Index: MissingArgPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/MissingArgPtg.java,v
  retrieving revision 1.4
  retrieving revision 1.4.2.1
  diff -u -r1.4 -r1.4.2.1
  --- MissingArgPtg.java	30 Apr 2003 04:39:02 -0000	1.4
  +++ MissingArgPtg.java	23 Aug 2003 19:40:04 -0000	1.4.2.1
  @@ -54,7 +54,7 @@
   
   package org.apache.poi.hssf.record.formula;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Missing Function Arguments
  @@ -91,7 +91,7 @@
       }
   
      
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return " ";
       }
  @@ -103,5 +103,3 @@
       }
   
   }
  -
  -
  
  
  
  1.10.2.1  +5 -5      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/MultiplyPtg.java
  
  Index: MultiplyPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/MultiplyPtg.java,v
  retrieving revision 1.10
  retrieving revision 1.10.2.1
  diff -u -r1.10 -r1.10.2.1
  --- MultiplyPtg.java	30 Apr 2003 04:39:02 -0000	1.10
  +++ MultiplyPtg.java	23 Aug 2003 19:40:04 -0000	1.10.2.1
  @@ -61,7 +61,7 @@
   package org.apache.poi.hssf.record.formula;
   
   import java.util.List;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Implements the standard mathmatical multiplication - *
  @@ -114,7 +114,7 @@
       }
       
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "*";
       }
  @@ -123,9 +123,9 @@
       {
           StringBuffer buffer = new StringBuffer();
   
  -        buffer.append(operands[ 0 ].toFormulaString((SheetReferences)null));
  +        buffer.append(operands[ 0 ].toFormulaString((Workbook)null));
           buffer.append("*");
  -        buffer.append(operands[ 1 ].toFormulaString((SheetReferences)null));
  +        buffer.append(operands[ 1 ].toFormulaString((Workbook)null));
           return buffer.toString();
       }
       
  @@ -133,7 +133,7 @@
           StringBuffer buffer = new StringBuffer();
   
           buffer.append(operands[ 0 ]);
  -        buffer.append(toFormulaString((SheetReferences)null));
  +        buffer.append(toFormulaString((Workbook)null));
           buffer.append(operands[ 1 ]);
           return buffer.toString();
       }                  
  
  
  
  1.6.2.3   +21 -6     jakarta-poi/src/java/org/apache/poi/hssf/record/formula/NamePtg.java
  
  Index: NamePtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/NamePtg.java,v
  retrieving revision 1.6.2.2
  retrieving revision 1.6.2.3
  diff -u -r1.6.2.2 -r1.6.2.3
  --- NamePtg.java	25 Jul 2003 18:22:19 -0000	1.6.2.2
  +++ NamePtg.java	23 Aug 2003 19:40:04 -0000	1.6.2.3
  @@ -61,7 +61,8 @@
   package org.apache.poi.hssf.record.formula;
   
   import org.apache.poi.util.LittleEndian;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
  +import org.apache.poi.hssf.record.NameRecord;
   
   /**
    *
  @@ -85,9 +86,22 @@
   
       /** Creates new NamePtg */
   
  -    public NamePtg(String name)
  +    public NamePtg(String name, Workbook book)
       {
  -        //TODO
  +        final short n = (short) (book.getNumNames() + 1);
  +        NameRecord rec;
  +        for (short i = 1; i < n; i++) {
  +            rec = book.getNameRecord(i - 1);
  +            if (name.equals(rec.getNameText())) {
  +                field_1_label_index = i;
  +                return;
  +            }
  +        }
  +        rec = new NameRecord();
  +        rec.setNameText(name);
  +        rec.setNameTextLength((byte) name.length());
  +        book.addName(rec);
  +        field_1_label_index = n;
       }
   
       /** Creates new NamePtg */
  @@ -113,12 +127,13 @@
           return SIZE;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
  -        return "NAMED RANGE";
  +        NameRecord rec = book.getNameRecord(field_1_label_index - 1);
  +        return rec.getNameText();
       }
       
  -    public byte getDefaultOperandClass() {return Ptg.CLASS_VALUE;}
  +    public byte getDefaultOperandClass() {return Ptg.CLASS_REF;}
   
       public Object clone() {
         NamePtg ptg = new NamePtg();
  
  
  
  1.1.2.2   +2 -2      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/NameXPtg.java
  
  Index: NameXPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/NameXPtg.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- NameXPtg.java	1 Jul 2003 14:47:34 -0000	1.1.2.1
  +++ NameXPtg.java	23 Aug 2003 19:40:04 -0000	1.1.2.2
  @@ -61,7 +61,7 @@
   package org.apache.poi.hssf.record.formula;
   
   import org.apache.poi.util.LittleEndian;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    *
  @@ -113,7 +113,7 @@
           return SIZE;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "NO IDEA - NAME";
       }
  
  
  
  1.1.2.2   +3 -3      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/NotEqualPtg.java
  
  Index: NotEqualPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/NotEqualPtg.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- NotEqualPtg.java	31 Jul 2003 17:55:09 -0000	1.1.2.1
  +++ NotEqualPtg.java	23 Aug 2003 19:40:04 -0000	1.1.2.2
  @@ -56,7 +56,7 @@
   
   import java.util.List;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Ptg class to implement not equal
  @@ -101,7 +101,7 @@
   		  return 2;
   	 }
   
  -	 public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
   	 {
   		  return "<>";
   	 }
  @@ -111,7 +111,7 @@
   
           
   		  buffer.append(operands[ 0 ]);
  -		  buffer.append(toFormulaString((SheetReferences)null));
  +		  buffer.append(toFormulaString((Workbook)null));
   		  buffer.append(operands[ 1 ]);
   		  return buffer.toString();
   	 }       
  
  
  
  1.6.2.1   +2 -3      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/NumberPtg.java
  
  Index: NumberPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/NumberPtg.java,v
  retrieving revision 1.6
  retrieving revision 1.6.2.1
  diff -u -r1.6 -r1.6.2.1
  --- NumberPtg.java	30 Apr 2003 04:39:02 -0000	1.6
  +++ NumberPtg.java	23 Aug 2003 19:40:04 -0000	1.6.2.1
  @@ -55,7 +55,7 @@
   package org.apache.poi.hssf.record.formula;
   
   import org.apache.poi.util.LittleEndian;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   /**
    * Number
    * Stores a floating point value in a formula
  @@ -113,7 +113,7 @@
           return SIZE;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "" + getValue();
       }
  @@ -125,4 +125,3 @@
         return ptg;
       }
   }
  -
  
  
  
  1.10.2.1  +2 -3      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/ParenthesisPtg.java
  
  Index: ParenthesisPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/ParenthesisPtg.java,v
  retrieving revision 1.10
  retrieving revision 1.10.2.1
  diff -u -r1.10 -r1.10.2.1
  --- ParenthesisPtg.java	30 Apr 2003 04:39:02 -0000	1.10
  +++ ParenthesisPtg.java	23 Aug 2003 19:40:04 -0000	1.10.2.1
  @@ -57,7 +57,7 @@
   
   import java.util.List;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * While formula tokens are stored in RPN order and thus do not need parenthesis for 
  @@ -107,7 +107,7 @@
           return 1;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "()";
       }
  @@ -124,4 +124,3 @@
       }
   
   }
  -
  
  
  
  1.11.2.1  +3 -3      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/PowerPtg.java
  
  Index: PowerPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/PowerPtg.java,v
  retrieving revision 1.11
  retrieving revision 1.11.2.1
  diff -u -r1.11 -r1.11.2.1
  --- PowerPtg.java	30 Apr 2003 04:39:02 -0000	1.11
  +++ PowerPtg.java	23 Aug 2003 19:40:04 -0000	1.11.2.1
  @@ -62,7 +62,7 @@
   
   import java.util.List;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    *
  @@ -108,7 +108,7 @@
           return 2;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "^";
       }
  @@ -118,7 +118,7 @@
   
           
           buffer.append(operands[ 0 ]);
  -        buffer.append(toFormulaString((SheetReferences)null));
  +        buffer.append(toFormulaString((Workbook)null));
           buffer.append(operands[ 1 ]);
           return buffer.toString();
       }       
  
  
  
  1.29.2.3  +2 -2      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/Ptg.java
  
  Index: Ptg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/Ptg.java,v
  retrieving revision 1.29.2.2
  retrieving revision 1.29.2.3
  diff -u -r1.29.2.2 -r1.29.2.3
  --- Ptg.java	8 Jun 2003 12:30:43 -0000	1.29.2.2
  +++ Ptg.java	23 Aug 2003 19:40:04 -0000	1.29.2.3
  @@ -63,7 +63,7 @@
   import java.util.List;
   import java.util.ArrayList;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    *
  @@ -347,7 +347,7 @@
       /**
        * return a string representation of this token alone
        */
  -    public abstract String toFormulaString(SheetReferences refs);
  +    public abstract String toFormulaString(Workbook book);
       /**
        * dump a debug representation (hexdump) to a string
        */
  
  
  
  1.10.2.3  +3 -1      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/Ref3DPtg.java
  
  Index: Ref3DPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/Ref3DPtg.java,v
  retrieving revision 1.10.2.2
  retrieving revision 1.10.2.3
  diff -u -r1.10.2.2 -r1.10.2.3
  --- Ref3DPtg.java	1 Jul 2003 14:47:34 -0000	1.10.2.2
  +++ Ref3DPtg.java	23 Aug 2003 19:40:04 -0000	1.10.2.3
  @@ -61,6 +61,7 @@
   import org.apache.poi.hssf.util.RangeAddress;
   import org.apache.poi.hssf.util.CellReference;
   import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   import org.apache.poi.util.BitField;
   import org.apache.poi.hssf.model.Workbook;
   
  @@ -193,8 +194,9 @@
   
       }
   
  -    public String toFormulaString(SheetReferences refs) {
  +    public String toFormulaString(Workbook book) {
           StringBuffer retval = new StringBuffer();
  +        SheetReferences refs = book == null ? null : book.getSheetReferences();
           if (refs != null) {
               retval.append(refs.getSheetName((int)this.field_1_index_extern_sheet));
               retval.append('!');
  
  
  
  1.8.2.2   +2 -2      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/ReferencePtg.java
  
  Index: ReferencePtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/ReferencePtg.java,v
  retrieving revision 1.8.2.1
  retrieving revision 1.8.2.2
  diff -u -r1.8.2.1 -r1.8.2.2
  --- ReferencePtg.java	1 Jul 2003 14:47:34 -0000	1.8.2.1
  +++ ReferencePtg.java	23 Aug 2003 19:40:04 -0000	1.8.2.2
  @@ -64,7 +64,7 @@
   import org.apache.poi.util.BitField;
   
   import org.apache.poi.hssf.util.CellReference;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * ReferencePtg - handles references (such as A1, A2, IA4)
  @@ -179,7 +179,7 @@
           return SIZE;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           //TODO -- should we store a cellreference instance in this ptg?? but .. memory is an issue, i believe!
           return (new CellReference(getRow(),getColumn(),!isRowRelative(),!isColRelative())).toString();
  
  
  
  1.6.2.2   +2 -3      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/StringPtg.java
  
  Index: StringPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/StringPtg.java,v
  retrieving revision 1.6.2.1
  retrieving revision 1.6.2.2
  diff -u -r1.6.2.1 -r1.6.2.2
  --- StringPtg.java	25 Jul 2003 18:22:19 -0000	1.6.2.1
  +++ StringPtg.java	23 Aug 2003 19:40:04 -0000	1.6.2.2
  @@ -56,7 +56,7 @@
   
   import org.apache.poi.util.LittleEndian;
   import org.apache.poi.util.BitField;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   import org.apache.poi.util.StringUtil;
   
   /**
  @@ -145,7 +145,7 @@
           }
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "\""+getValue()+"\"";
       }
  @@ -162,4 +162,3 @@
      }
   
   }
  -
  
  
  
  1.9.2.1   +2 -2      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/SubtractPtg.java
  
  Index: SubtractPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/SubtractPtg.java,v
  retrieving revision 1.9
  retrieving revision 1.9.2.1
  diff -u -r1.9 -r1.9.2.1
  --- SubtractPtg.java	30 Apr 2003 04:39:02 -0000	1.9
  +++ SubtractPtg.java	23 Aug 2003 19:40:04 -0000	1.9.2.1
  @@ -61,7 +61,7 @@
   package org.apache.poi.hssf.record.formula;
   
   import java.util.List;
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    *
  @@ -105,7 +105,7 @@
           return 2;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "-";
       }
  
  
  
  1.1.2.2   +2 -2      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/UnaryMinusPtg.java
  
  Index: UnaryMinusPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/UnaryMinusPtg.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- UnaryMinusPtg.java	3 Jun 2003 12:42:09 -0000	1.1.2.1
  +++ UnaryMinusPtg.java	23 Aug 2003 19:40:04 -0000	1.1.2.2
  @@ -56,7 +56,7 @@
   
   import java.util.List;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Unary Plus operator
  @@ -105,7 +105,7 @@
       }
       
       /** Implementation of method from Ptg */
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "+";
       }
  
  
  
  1.1.2.2   +2 -2      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/UnaryPlusPtg.java
  
  Index: UnaryPlusPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/UnaryPlusPtg.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- UnaryPlusPtg.java	3 Jun 2003 12:42:09 -0000	1.1.2.1
  +++ UnaryPlusPtg.java	23 Aug 2003 19:40:04 -0000	1.1.2.2
  @@ -56,7 +56,7 @@
   
   import java.util.List;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * Unary Plus operator
  @@ -105,7 +105,7 @@
       }
       
       /** Implementation of method from Ptg */
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "+";
       }
  
  
  
  1.2.2.1   +2 -2      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/UnionPtg.java
  
  Index: UnionPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/UnionPtg.java,v
  retrieving revision 1.2
  retrieving revision 1.2.2.1
  diff -u -r1.2 -r1.2.2.1
  --- UnionPtg.java	30 Apr 2003 04:39:02 -0000	1.2
  +++ UnionPtg.java	23 Aug 2003 19:40:04 -0000	1.2.2.1
  @@ -54,7 +54,7 @@
   
   package org.apache.poi.hssf.record.formula;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    * @author Glen Stampoultzis (glens at apache.org)
  @@ -95,7 +95,7 @@
       }
   
       /** Implementation of method from Ptg */
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return ",";
       }
  
  
  
  1.5.2.1   +2 -2      jakarta-poi/src/java/org/apache/poi/hssf/record/formula/UnknownPtg.java
  
  Index: UnknownPtg.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/UnknownPtg.java,v
  retrieving revision 1.5
  retrieving revision 1.5.2.1
  diff -u -r1.5 -r1.5.2.1
  --- UnknownPtg.java	30 Apr 2003 04:39:02 -0000	1.5
  +++ UnknownPtg.java	23 Aug 2003 19:40:04 -0000	1.5.2.1
  @@ -60,7 +60,7 @@
    */
   package org.apache.poi.hssf.record.formula;
   
  -import org.apache.poi.hssf.util.SheetReferences;
  +import org.apache.poi.hssf.model.Workbook;
   
   /**
    *
  @@ -94,7 +94,7 @@
           return size;
       }
   
  -    public String toFormulaString(SheetReferences refs)
  +    public String toFormulaString(Workbook book)
       {
           return "UNKNOWN";
       }
  
  
  
  No                   revision
  No                   revision
  1.22.2.1  +1 -2      jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java
  
  Index: HSSFCell.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java,v
  retrieving revision 1.22
  retrieving revision 1.22.2.1
  diff -u -r1.22 -r1.22.2.1
  --- HSSFCell.java	30 Apr 2003 04:39:00 -0000	1.22
  +++ HSSFCell.java	23 Aug 2003 19:40:05 -0000	1.22.2.1
  @@ -726,8 +726,7 @@
   
       public String getCellFormula() {
           //Workbook.currentBook=book;
  -        SheetReferences refs = book.getSheetReferences();
  -        String retval = FormulaParser.toFormulaString(refs, ((FormulaRecordAggregate)record).getFormulaRecord().getParsedExpression());
  +        String retval = FormulaParser.toFormulaString(book, ((FormulaRecordAggregate)record).getFormulaRecord().getParsedExpression());
           //Workbook.currentBook=null;
           return retval;
       }
  
  
  
  1.8.2.1   +1 -3      jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFName.java
  
  Index: HSSFName.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFName.java,v
  retrieving revision 1.8
  retrieving revision 1.8.2.1
  diff -u -r1.8 -r1.8.2.1
  --- HSSFName.java	30 Apr 2003 04:39:00 -0000	1.8
  +++ HSSFName.java	23 Aug 2003 19:40:05 -0000	1.8.2.1
  @@ -123,8 +123,7 @@
   
       public String getReference() {
           String result;
  -        SheetReferences refs = book.getSheetReferences();
  -        result = name.getAreaReference(refs);
  +        result = name.getAreaReference(book);
   
           return result;
       }
  @@ -167,4 +166,3 @@
       }
   
   }
  -
  
  
  
  1.24.2.2  +1 -1      jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
  
  Index: HSSFWorkbook.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java,v
  retrieving revision 1.24.2.1
  retrieving revision 1.24.2.2
  diff -u -r1.24.2.1 -r1.24.2.2
  --- HSSFWorkbook.java	24 Jul 2003 19:22:34 -0000	1.24.2.1
  +++ HSSFWorkbook.java	23 Aug 2003 19:40:05 -0000	1.24.2.2
  @@ -898,7 +898,7 @@
   		if (name == null) return null;
   		//adding one here because 0 indicates a global named region; doesnt make sense for print areas
      
  -		return name.getAreaReference(workbook.getSheetReferences());
  +		return name.getAreaReference(workbook);
   	}    
       
       /**
  
  
  
  No                   revision
  No                   revision
  1.7.2.1   +14 -2     jakarta-poi/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java
  
  Index: TestFormulaParser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java,v
  retrieving revision 1.7
  retrieving revision 1.7.2.1
  diff -u -r1.7 -r1.7.2.1
  --- TestFormulaParser.java	7 May 2003 03:40:52 -0000	1.7
  +++ TestFormulaParser.java	23 Aug 2003 19:40:05 -0000	1.7.2.1
  @@ -56,7 +56,6 @@
   import junit.framework.TestCase;
   
   import org.apache.poi.hssf.record.formula.*;
  -import org.apache.poi.hssf.util.SheetReferences;
   
   /**
    * Test the low level formula parser functionality. High level tests are to 
  @@ -145,7 +144,7 @@
           assertEquals(true, flag.getValue());
           assertEquals("Y", y.getValue());
           assertEquals("N", n.getValue());
  -        assertEquals("IF", funif.toFormulaString(new SheetReferences()));
  +        assertEquals("IF", funif.toFormulaString((Workbook) null));
           assertTrue("Goto ptg exists", goto1.isGoto());
       }
   
  @@ -285,6 +284,19 @@
   		
   	}
   	    
  +    public void testMacroFunction() {
  +        Workbook w = new Workbook();
  +        FormulaParser fp = new FormulaParser("FOO()", w);
  +        fp.parse();
  +        Ptg[] ptg = fp.getRPNPtg();
  +
  +        AbstractFunctionPtg tfunc = (AbstractFunctionPtg) ptg[0];
  +        assertEquals("externalflag", tfunc.getName());
  +
  +        NamePtg tname = (NamePtg) ptg[1];
  +        assertEquals("FOO", tname.toFormulaString(w));
  +    }
  +
        public static void main(String [] args) {
           System.out.println("Testing org.apache.poi.hssf.record.formula.FormulaParser");
           junit.textui.TestRunner.run(TestFormulaParser.class);
  
  
  
  No                   revision
  No                   revision
  1.30.2.1  +52 -6     jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestFormulas.java
  
  Index: TestFormulas.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestFormulas.java,v
  retrieving revision 1.30
  retrieving revision 1.30.2.1
  diff -u -r1.30 -r1.30.2.1
  --- TestFormulas.java	4 May 2003 18:22:09 -0000	1.30
  +++ TestFormulas.java	23 Aug 2003 19:40:05 -0000	1.30.2.1
  @@ -744,7 +744,7 @@
       }
       
       public void testSheetFunctions()
  -        throws java.io.IOException
  +        throws IOException
       {
           String filename = System.getProperty("HSSF.testdata.path");
   
  @@ -818,7 +818,7 @@
       }
       
       public void testStringFormulas()
  -        throws java.io.IOException
  +        throws IOException
       {
           String readFilename = System.getProperty("HSSF.testdata.path");
   
  @@ -852,7 +852,7 @@
       
       
       public void testLogicalFormulas()
  -        throws java.io.IOException
  +        throws IOException
       {
   
               File file = File.createTempFile("testLogicalFormula",".xls");
  @@ -880,7 +880,7 @@
       }
       
       public void testDateFormulas()
  -        throws java.io.IOException
  +        throws IOException
       {
           String readFilename = System.getProperty("HSSF.testdata.path");
   
  @@ -918,7 +918,7 @@
   
       
       public void testIfFormulas()
  -        throws java.io.IOException
  +        throws IOException
       {
           String readFilename = System.getProperty("HSSF.testdata.path");
   
  @@ -1008,7 +1008,7 @@
       }
   
   	public void testSumIf()
  -		throws java.io.IOException
  +		throws IOException
   	{
   		String readFilename = System.getProperty("HSSF.testdata.path");		
   		String function ="SUMIF(A1:A5,\">4000\",B1:B5)";
  @@ -1060,6 +1060,52 @@
   		assertTrue("sumif == 0 bytes", file.length() > 0);
   	}
       
  +    public void testSquareMacro() throws IOException {
  +        File dir = new File(System.getProperty("HSSF.testdata.path"));
  +        File xls = new File(dir, "SquareMacro.xls");
  +        FileInputStream in = new FileInputStream(xls);
  +        HSSFWorkbook w;
  +        try {
  +            w = new HSSFWorkbook(in);
  +        } finally {
  +            in.close();
  +        }
  +        HSSFSheet s0 = w.getSheetAt(0);
  +        HSSFRow[] r = {s0.getRow(0), s0.getRow(1)};
  +
  +        HSSFCell a1 = r[0].getCell((short) 0);
  +        assertEquals("square(1)", a1.getCellFormula());
  +        assertEquals(1d, a1.getNumericCellValue(), 1e-9);
  +
  +        HSSFCell a2 = r[1].getCell((short) 0);
  +        assertEquals("square(2)", a2.getCellFormula());
  +        assertEquals(4d, a2.getNumericCellValue(), 1e-9);
  +
  +        HSSFCell b1 = r[0].getCell((short) 1);
  +        assertEquals("IF(TRUE,square(1))", b1.getCellFormula());
  +        assertEquals(1d, b1.getNumericCellValue(), 1e-9);
  +
  +        HSSFCell b2 = r[1].getCell((short) 1);
  +        assertEquals("IF(TRUE,square(2))", b2.getCellFormula());
  +        assertEquals(4d, b2.getNumericCellValue(), 1e-9);
  +
  +        HSSFCell c1 = r[0].getCell((short) 2);
  +        assertEquals("square(square(1))", c1.getCellFormula());
  +        assertEquals(1d, c1.getNumericCellValue(), 1e-9);
  +
  +        HSSFCell c2 = r[1].getCell((short) 2);
  +        assertEquals("square(square(2))", c2.getCellFormula());
  +        assertEquals(16d, c2.getNumericCellValue(), 1e-9);
  +
  +        HSSFCell d1 = r[0].getCell((short) 3);
  +        assertEquals("square(one())", d1.getCellFormula());
  +        assertEquals(1d, d1.getNumericCellValue(), 1e-9);
  +
  +        HSSFCell d2 = r[1].getCell((short) 3);
  +        assertEquals("square(two())", d2.getCellFormula());
  +        assertEquals(4d, d2.getNumericCellValue(), 1e-9);
  +    }
  +
       public static void main(String [] args) {
           System.out
           .println("Testing org.apache.poi.hssf.usermodel.TestFormulas");
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: poi-dev-help@jakarta.apache.org