diff --git a/src/java/org/apache/poi/hssf/record/formula/FormulaParser.java b/src/java/org/apache/poi/hssf/record/formula/FormulaParser.java index aadc7db5a..a47cbf5aa 100644 --- a/src/java/org/apache/poi/hssf/record/formula/FormulaParser.java +++ b/src/java/org/apache/poi/hssf/record/formula/FormulaParser.java @@ -244,7 +244,7 @@ public class FormulaParser { int numArgs = Arguments(); Match(')'); //this is the end of the function - tokens.add(new DummyFunctionPtg(name,numArgs)); + tokens.add(new FunctionPtg(name,(byte)numArgs)); } else if (Look == ':') { // this is a AreaReference String first = name; GetChar(); diff --git a/src/java/org/apache/poi/hssf/record/formula/FunctionPtg.java b/src/java/org/apache/poi/hssf/record/formula/FunctionPtg.java index dc0f64385..a1e688b11 100644 --- a/src/java/org/apache/poi/hssf/record/formula/FunctionPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/FunctionPtg.java @@ -9,33 +9,44 @@ package org.apache.poi.hssf.record.formula; import java.util.List; /** - * DUMMY DUMMY DUMMY - * This class exists only becoz i dont know how to handle functions in formula's properly - * to be used only for testing my parser. + * This class provides functions with variable arguments. * @author aviks + * @author Andrew C. Oliver (acoliver at apache dot org) * @version */ public class FunctionPtg extends OperationPtg { - private String name; - private int numOperands; + public final static short sid = 0x22; + private final static int SIZE = 2; + + private byte field_1_num_args; + private byte field_2_fnc_index; + + //private String name; + //private int numOperands; /** Creates new DummyFunctionPtg */ public FunctionPtg() { } - public FunctionPtg(String pName, int pNumOperands) { - name=pName; - numOperands = pNumOperands; + public FunctionPtg(String pName, byte pNumOperands) { + field_1_num_args = pNumOperands; + field_2_fnc_index = lookupIndex(pName); + } public int getType() { return -1; - } + } public int getNumberOfOperands() { - return numOperands; + return field_1_num_args; } + + public int getFunctionIndex() { + return field_2_fnc_index; + } + public String getName() { - return name; + return lookupName(field_2_fnc_index); } public String toFormulaString() { @@ -46,7 +57,7 @@ public class FunctionPtg extends OperationPtg { StringBuffer buf = new StringBuffer(); buf.append(getName()+"("); for (int i=0;i