acoliver    02/04/29 20:05:07

  Modified:    src/java/org/apache/poi/hssf/record/formula
                        FormulaParser.java FunctionPtg.java Ptg.java
               src/java/org/apache/poi/hssf/record FormulaRecord.java
  Log:
  functions + att (optimized functions) looking good.  Just filling out big ol 
function table.
  Soon will support most excel functions with areas.  need arrays next.
  
  Revision  Changes    Path
  1.13      +3 -0      
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/FormulaParser.java
  
  Index: FormulaParser.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/FormulaParser.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- FormulaParser.java        30 Apr 2002 01:05:48 -0000      1.12
  +++ FormulaParser.java        30 Apr 2002 03:05:07 -0000      1.13
  @@ -269,6 +269,9 @@
               ptg.setData((short)1); //sums don't care but this is what excel does.
               ptg.setSum(true);
               retval = ptg;
  +        } else {
  +            FunctionPtg ptg = new FunctionPtg(name,numArgs);
  +            retval = ptg;
           }
           
           return retval;
  
  
  
  1.5       +119 -10   
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/FunctionPtg.java
  
  Index: FunctionPtg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/FunctionPtg.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FunctionPtg.java  30 Apr 2002 00:19:49 -0000      1.4
  +++ FunctionPtg.java  30 Apr 2002 03:05:07 -0000      1.5
  @@ -1,6 +1,8 @@
   package org.apache.poi.hssf.record.formula;
   
   import java.util.List;
  +import java.util.ArrayList;
  +import org.apache.poi.util.LittleEndian;
   /**
    * This class provides functions with variable arguments.  
    * @author  Avik Sengupta
  @@ -9,10 +11,10 @@
    */
   public class FunctionPtg extends OperationPtg {
       public final static short sid  = 0x22;
  -    private final static int  SIZE = 3;    
  +    private final static int  SIZE = 4;    
       
       private byte field_1_num_args;
  -    private byte field_2_fnc_index;
  +    private short field_2_fnc_index;
       
       //private String name;
       //private int numOperands;
  @@ -23,7 +25,7 @@
       public FunctionPtg(byte[] data, int offset) {
           offset++;
           field_1_num_args = data[ offset + 0 ];
  -        field_2_fnc_index  = data[offset + 1 ];
  +        field_2_fnc_index  = LittleEndian.getShort(data,offset + 1 );
           
       }
       
  @@ -33,6 +35,17 @@
           field_2_fnc_index = lookupIndex(pName);
           
       }
  +    
  +    public String toString() {
  +        StringBuffer buffer = new StringBuffer();
  +        buffer
  +        .append("<FunctionPtg>").append("\n")
  +        .append("   field_1_num_args=").append(field_1_num_args).append("\n")
  +        .append("      name         
=").append(lookupName(field_2_fnc_index)).append("\n")
  +        .append("   field_2_fnc_index=").append(field_2_fnc_index).append("\n")
  +        .append("</FunctionPtg>");
  +        return buffer.toString();
  +    }
      
       public int getType() {
           return -1;
  @@ -42,7 +55,7 @@
           return field_1_num_args;
       }
       
  -    public int getFunctionIndex() {
  +    public short getFunctionIndex() {
           return field_2_fnc_index;
       }
       
  @@ -82,20 +95,116 @@
       public void writeBytes(byte[] array, int offset) {
           array[offset+0]=sid;
           array[offset+1]=field_1_num_args;
  -        array[offset+2]=field_2_fnc_index;
  +        LittleEndian.putShort(array,offset+2,field_2_fnc_index);
       }
       
       public int getSize() {
           return SIZE;
       }
       
  -    private String lookupName(byte index) {
  -        return "SUM"; //for now always return "SUM"
  +    private String lookupName(short index) {
  +        String retval = null;
  +        switch (index) {
  +            case 5: 
  +                retval="AVERAGE";
  +            break;
  +        }
  +        return retval; //for now always return "SUM"
       }
       
  -    private byte lookupIndex(String name) {
  -        return 4; //for now just return SUM everytime...
  +    private short lookupIndex(String name) {
  +        short retval=0;
  +        if (name.equals("AVERAGE")) {
  +            retval=(short)5;
  +        }
  +        return retval; //for now just return SUM everytime...
       }
       
  -  
  +    /**
  +     * Produces the function table hashmap
  +     */
  +    private static List produceHash() {
  +        List list = new ArrayList(349);
  +        list.add(0,"COUNT");
  +        list.add(2,"ISNA");
  +        list.add(3,"ISERROR");
  +        list.add(4,"SUM");
  +        list.add(5,"AVERAGE");
  +        list.add(6,"MIN");
  +        list.add(7,"MAX");
  +        list.add(8,"ROW");
  +        list.add(9,"COLUMN");
  +        list.add(10,"NA");
  +        list.add(11,"NPV");
  +        list.add(12,"STDEV");
  +        list.add(13,"DOLLAR");
  +        list.add(14,"FIXED");
  +        list.add(15,"SIN");
  +        list.add(16,"COS");
  +        list.add(17,"TAN");
  +        list.add(18,"ATAN");
  +        list.add(19,"PI");
  +        list.add(20,"SQRT");
  +        list.add(21,"EXP");
  +        list.add(22,"LN");
  +        list.add(23,"LOG10");
  +        list.add(24,"ABS");
  +        list.add(25,"INT");
  +        list.add(26,"SIGN");
  +        list.add(27,"ROUND");
  +        list.add(28,"LOOKUP");
  +        list.add(29,"INDEX");
  +        list.add(30,"REPT");
  +        list.add(31,"MID");
  +        list.add(32,"LEN");
  +        list.add(33,"VALUE");
  +        list.add(34,"TRUE");
  +        list.add(35,"FALSE");
  +        list.add(36,"AND");
  +        list.add(37,"OR");
  +        list.add(38,"NOT");
  +        list.add(39,"MOD");
  +        list.add(40,"DCOUNT");
  +        list.add(41,"DSUM");
  +        list.add(42,"DAVERAGE");
  +        list.add(43,"DMIN");
  +        list.add(44,"DMAX");
  +        list.add(45,"DSTDEV");
  +        list.add(46,"VAR");
  +        list.add(47,"DVAR");
  +        list.add(48,"TEXT");
  +        list.add(49,"LINEST");
  +        list.add(50,"TREND");
  +        list.add(51,"LOGEST");
  +        list.add(52,"GROWTH");
  +        list.add(53,"GOTO");
  +        list.add(54,"HALT");
  +        list.add(56,"PV");
  +        list.add(57,"FV");
  +        list.add(58,"NPER");
  +        list.add(59,"PMT");
  +        list.add(60,"RATE");
  +        list.add(61,"MIRR");
  +        list.add(62,"IRR");
  +        list.add(63,"RAND");
  +        list.add(64,"MATCH");
  +        list.add(65,"DATE");
  +        list.add(66,"TIME");
  +        list.add(67,"DAY");
  +        list.add(68,"MONTH");
  +        list.add(69,"YEAR");
  +        list.add(70,"WEEKDAY");
  +        list.add(71,"HOUR");
  +        list.add(72,"MINUTE");
  +        list.add(73,"SECOND");
  +        list.add(74,"NOW");
  +        list.add(75,"AREAS");
  +        list.add(76,"ROWS");
  +        list.add(77,"COLUMNS");
  +        list.add(78,"OFFSET");
  +        list.add(79,"ABSREF");
  +        list.add(80,"RELREF");
  +        list.add(81,"ARGUMENT");
  +        return list;
  +    }
   }
  
  
  
  1.13      +4 -3      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.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- Ptg.java  30 Apr 2002 01:05:48 -0000      1.12
  +++ Ptg.java  30 Apr 2002 03:05:07 -0000      1.13
  @@ -235,14 +235,14 @@
                   retval = new FunctionPtg(data, offset);
                   break;
                   
  -/*            case valueFunc :
  +            case valueFunc :
                   retval = new FunctionPtg(data, offset);
                   break;
                   
               case arrayFunc :
                   retval = new FunctionPtg(data, offset);
                   break;
  -  */              
  +                
                   
                case NumberPtg.sid :
                   retval = new NumberPtg(data, offset);
  @@ -299,7 +299,7 @@
       /**
        * dump a debug representation (hexdump) to a strnig
        */
  -    public void toDebugString() {
  +    public String toDebugString() {
           byte[] ba = new byte[getSize()];
           String retval=null;
           writeBytes(ba,0);        
  @@ -308,6 +308,7 @@
           } catch (Exception e) {
               e.printStackTrace();
           }
  +        return retval;
       }
       
       
  
  
  
  1.11      +7 -1      
jakarta-poi/src/java/org/apache/poi/hssf/record/FormulaRecord.java
  
  Index: FormulaRecord.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/FormulaRecord.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- FormulaRecord.java        30 Apr 2002 01:05:49 -0000      1.10
  +++ FormulaRecord.java        30 Apr 2002 03:05:07 -0000      1.11
  @@ -536,7 +536,13 @@
               for (int k = 0; k < field_8_parsed_expr.size(); k++ ) {
   /*                buffer.append("formula ").append(k).append(" ")
                  .append(((Ptg)field_8_parsed_expr.get(k)).toFormulaString());*/
  -                ((Ptg)field_8_parsed_expr.get(k)).toDebugString();
  +                buffer.append("Formula ")
  +                .append(k)
  +                .append("=")
  +                .append(((Ptg)field_8_parsed_expr.get(k)).toString())
  +                .append("\n")
  +                .append(((Ptg)field_8_parsed_expr.get(k)).toDebugString())
  +                .append("\n");                
               }
               
               
  
  
  


Reply via email to