Search in sources :

Example 1 with AttrPtg

use of org.apache.poi.ss.formula.ptg.AttrPtg in project poi by apache.

the class ParseNode method collectIfPtgs.

/**
	 * The IF() function gets marked up with two or three tAttr tokens.
	 * Similar logic will be required for CHOOSE() when it is supported
	 *
	 * See excelfileformat.pdf sec 3.10.5 "tAttr (19H)
	 */
private void collectIfPtgs(TokenCollector temp) {
    // condition goes first
    getChildren()[0].collectPtgs(temp);
    // placeholder for tAttrIf
    int ifAttrIndex = temp.createPlaceholder();
    // true parameter
    getChildren()[1].collectPtgs(temp);
    // placeholder for first skip attr
    int skipAfterTrueParamIndex = temp.createPlaceholder();
    int trueParamSize = temp.sumTokenSizes(ifAttrIndex + 1, skipAfterTrueParamIndex);
    // distance to start of false parameter/tFuncVar. +4 for tAttrSkip after true
    AttrPtg attrIf = AttrPtg.createIf(trueParamSize + 4);
    if (getChildren().length > 2) {
        // false param present
        // false parameter
        getChildren()[2].collectPtgs(temp);
        int skipAfterFalseParamIndex = temp.createPlaceholder();
        int falseParamSize = temp.sumTokenSizes(skipAfterTrueParamIndex + 1, skipAfterFalseParamIndex);
        // 1 less than distance to end of if FuncVar(size=4). +4 for attr skip before
        AttrPtg attrSkipAfterTrue = AttrPtg.createSkip(falseParamSize + 4 + 4 - 1);
        // 1 less than distance to end of if FuncVar(size=4).
        AttrPtg attrSkipAfterFalse = AttrPtg.createSkip(4 - 1);
        temp.setPlaceholder(ifAttrIndex, attrIf);
        temp.setPlaceholder(skipAfterTrueParamIndex, attrSkipAfterTrue);
        temp.setPlaceholder(skipAfterFalseParamIndex, attrSkipAfterFalse);
    } else {
        // false parameter not present
        // 1 less than distance to end of if FuncVar(size=4).
        AttrPtg attrSkipAfterTrue = AttrPtg.createSkip(4 - 1);
        temp.setPlaceholder(ifAttrIndex, attrIf);
        temp.setPlaceholder(skipAfterTrueParamIndex, attrSkipAfterTrue);
    }
    temp.add(_token);
}
Also used : AttrPtg(org.apache.poi.ss.formula.ptg.AttrPtg)

Example 2 with AttrPtg

use of org.apache.poi.ss.formula.ptg.AttrPtg in project poi by apache.

the class TestFormulaParser method testComplexExplicitRangeEncodings.

/**
     * Checks that the area-ref and explicit range operators get the right associativity
     * and that the {@link MemFuncPtg} / {@link MemAreaPtg} is added correctly
     */
@Test
public void testComplexExplicitRangeEncodings() {
    Ptg[] ptgs;
    ptgs = parseFormula("SUM(OFFSET(A1,0,0):B2:C3:D4:E5:OFFSET(F6,1,1):G7)");
    confirmTokenClasses(ptgs, // len 57
    MemFuncPtg.class, // [A1]
    RefPtg.class, // [0]
    IntPtg.class, // [0]
    IntPtg.class, // [OFFSET nArgs=3]
    FuncVarPtg.class, // [B2:C3]
    AreaPtg.class, RangePtg.class, // [D4:E5]
    AreaPtg.class, RangePtg.class, // [F6]
    RefPtg.class, // [1]
    IntPtg.class, // [1]
    IntPtg.class, // [OFFSET nArgs=3]
    FuncVarPtg.class, RangePtg.class, // [G7]
    RefPtg.class, RangePtg.class, // [sum ]
    AttrPtg.class);
    MemFuncPtg mf = (MemFuncPtg) ptgs[0];
    assertEquals(57, mf.getLenRefSubexpression());
    assertEquals("D4:E5", ((AreaPtgBase) ptgs[7]).toFormulaString());
    assertTrue(((AttrPtg) ptgs[16]).isSum());
    ptgs = parseFormula("SUM(A1:B2:C3:D4)");
    confirmTokenClasses(ptgs, // len 19
    MemAreaPtg.class, // [A1:B2]
    AreaPtg.class, // [C3:D4]
    AreaPtg.class, RangePtg.class, // [sum ]
    AttrPtg.class);
    MemAreaPtg ma = (MemAreaPtg) ptgs[0];
    assertEquals(19, ma.getLenRefSubexpression());
}
Also used : MemAreaPtg(org.apache.poi.ss.formula.ptg.MemAreaPtg) NumberPtg(org.apache.poi.ss.formula.ptg.NumberPtg) ArrayPtg(org.apache.poi.ss.formula.ptg.ArrayPtg) AttrPtg(org.apache.poi.ss.formula.ptg.AttrPtg) PercentPtg(org.apache.poi.ss.formula.ptg.PercentPtg) RangePtg(org.apache.poi.ss.formula.ptg.RangePtg) AddPtg(org.apache.poi.ss.formula.ptg.AddPtg) EqualPtg(org.apache.poi.ss.formula.ptg.EqualPtg) UnaryMinusPtg(org.apache.poi.ss.formula.ptg.UnaryMinusPtg) NameXPtg(org.apache.poi.ss.formula.ptg.NameXPtg) RefPtg(org.apache.poi.ss.formula.ptg.RefPtg) DividePtg(org.apache.poi.ss.formula.ptg.DividePtg) GreaterThanPtg(org.apache.poi.ss.formula.ptg.GreaterThanPtg) MultiplyPtg(org.apache.poi.ss.formula.ptg.MultiplyPtg) Ref3DPtg(org.apache.poi.ss.formula.ptg.Ref3DPtg) StringPtg(org.apache.poi.ss.formula.ptg.StringPtg) ErrPtg(org.apache.poi.ss.formula.ptg.ErrPtg) Ptg(org.apache.poi.ss.formula.ptg.Ptg) Area3DPtg(org.apache.poi.ss.formula.ptg.Area3DPtg) NamePtg(org.apache.poi.ss.formula.ptg.NamePtg) MemAreaPtg(org.apache.poi.ss.formula.ptg.MemAreaPtg) ConcatPtg(org.apache.poi.ss.formula.ptg.ConcatPtg) UnaryPlusPtg(org.apache.poi.ss.formula.ptg.UnaryPlusPtg) BoolPtg(org.apache.poi.ss.formula.ptg.BoolPtg) IntersectionPtg(org.apache.poi.ss.formula.ptg.IntersectionPtg) AbstractFunctionPtg(org.apache.poi.ss.formula.ptg.AbstractFunctionPtg) IntPtg(org.apache.poi.ss.formula.ptg.IntPtg) UnionPtg(org.apache.poi.ss.formula.ptg.UnionPtg) FuncVarPtg(org.apache.poi.ss.formula.ptg.FuncVarPtg) SubtractPtg(org.apache.poi.ss.formula.ptg.SubtractPtg) FuncPtg(org.apache.poi.ss.formula.ptg.FuncPtg) MissingArgPtg(org.apache.poi.ss.formula.ptg.MissingArgPtg) MemFuncPtg(org.apache.poi.ss.formula.ptg.MemFuncPtg) PowerPtg(org.apache.poi.ss.formula.ptg.PowerPtg) AreaPtg(org.apache.poi.ss.formula.ptg.AreaPtg) ParenthesisPtg(org.apache.poi.ss.formula.ptg.ParenthesisPtg) MemFuncPtg(org.apache.poi.ss.formula.ptg.MemFuncPtg) Test(org.junit.Test)

Example 3 with AttrPtg

use of org.apache.poi.ss.formula.ptg.AttrPtg in project poi by apache.

the class TestFormulaParserIf method confirmAttrData.

private static void confirmAttrData(Ptg[] ptgs, int i, int expectedData) {
    Ptg ptg = ptgs[i];
    if (!(ptg instanceof AttrPtg)) {
        throw new AssertionFailedError("Token[" + i + "] was not AttrPtg as expected");
    }
    AttrPtg attrPtg = (AttrPtg) ptg;
    assertEquals(expectedData, attrPtg.getData());
}
Also used : IntPtg(org.apache.poi.ss.formula.ptg.IntPtg) Ptg(org.apache.poi.ss.formula.ptg.Ptg) LessEqualPtg(org.apache.poi.ss.formula.ptg.LessEqualPtg) FuncVarPtg(org.apache.poi.ss.formula.ptg.FuncVarPtg) RefPtg(org.apache.poi.ss.formula.ptg.RefPtg) NotEqualPtg(org.apache.poi.ss.formula.ptg.NotEqualPtg) FuncPtg(org.apache.poi.ss.formula.ptg.FuncPtg) AttrPtg(org.apache.poi.ss.formula.ptg.AttrPtg) AddPtg(org.apache.poi.ss.formula.ptg.AddPtg) MultiplyPtg(org.apache.poi.ss.formula.ptg.MultiplyPtg) StringPtg(org.apache.poi.ss.formula.ptg.StringPtg) LessThanPtg(org.apache.poi.ss.formula.ptg.LessThanPtg) BoolPtg(org.apache.poi.ss.formula.ptg.BoolPtg) AttrPtg(org.apache.poi.ss.formula.ptg.AttrPtg) AssertionFailedError(junit.framework.AssertionFailedError)

Example 4 with AttrPtg

use of org.apache.poi.ss.formula.ptg.AttrPtg in project poi by apache.

the class FormulaRenderer method toFormulaString.

/**
     * Static method to convert an array of {@link Ptg}s in RPN order
     * to a human readable string format in infix mode.
     * @param book  used for defined names and 3D references
     * @param ptgs  must not be <code>null</code>
     * @return a human readable String
     */
public static String toFormulaString(FormulaRenderingWorkbook book, Ptg[] ptgs) {
    if (ptgs == null || ptgs.length == 0) {
        throw new IllegalArgumentException("ptgs must not be null");
    }
    Stack<String> stack = new Stack<String>();
    for (Ptg ptg : ptgs) {
        // TODO - what about MemNoMemPtg?
        if (ptg instanceof MemAreaPtg || ptg instanceof MemFuncPtg || ptg instanceof MemErrPtg) {
            // TODO - put comment and throw exception in toFormulaString() of these classes
            continue;
        }
        if (ptg instanceof ParenthesisPtg) {
            String contents = stack.pop();
            stack.push("(" + contents + ")");
            continue;
        }
        if (ptg instanceof AttrPtg) {
            AttrPtg attrPtg = ((AttrPtg) ptg);
            if (attrPtg.isOptimizedIf() || attrPtg.isOptimizedChoose() || attrPtg.isSkip()) {
                continue;
            }
            if (attrPtg.isSpace()) {
                // POI currently doesn't render spaces in formulas
                continue;
            // but if it ever did, care must be taken:
            // tAttrSpace comes *before* the operand it applies to, which may be consistent
            // with how the formula text appears but is against the RPN ordering assumed here
            }
            if (attrPtg.isSemiVolatile()) {
                // similar to tAttrSpace - RPN is violated
                continue;
            }
            if (attrPtg.isSum()) {
                String[] operands = getOperands(stack, attrPtg.getNumberOfOperands());
                stack.push(attrPtg.toFormulaString(operands));
                continue;
            }
            throw new RuntimeException("Unexpected tAttr: " + attrPtg);
        }
        if (ptg instanceof WorkbookDependentFormula) {
            WorkbookDependentFormula optg = (WorkbookDependentFormula) ptg;
            stack.push(optg.toFormulaString(book));
            continue;
        }
        if (!(ptg instanceof OperationPtg)) {
            stack.push(ptg.toFormulaString());
            continue;
        }
        OperationPtg o = (OperationPtg) ptg;
        String[] operands = getOperands(stack, o.getNumberOfOperands());
        stack.push(o.toFormulaString(operands));
    }
    if (stack.isEmpty()) {
        // stack.push(). So this is either an internal error or impossible.
        throw new IllegalStateException("Stack underflow");
    }
    String result = stack.pop();
    if (!stack.isEmpty()) {
        // put anything on the stack
        throw new IllegalStateException("too much stuff left on the stack");
    }
    return result;
}
Also used : AttrPtg(org.apache.poi.ss.formula.ptg.AttrPtg) Ptg(org.apache.poi.ss.formula.ptg.Ptg) MemAreaPtg(org.apache.poi.ss.formula.ptg.MemAreaPtg) MemErrPtg(org.apache.poi.ss.formula.ptg.MemErrPtg) MemFuncPtg(org.apache.poi.ss.formula.ptg.MemFuncPtg) OperationPtg(org.apache.poi.ss.formula.ptg.OperationPtg) ParenthesisPtg(org.apache.poi.ss.formula.ptg.ParenthesisPtg) MemFuncPtg(org.apache.poi.ss.formula.ptg.MemFuncPtg) ParenthesisPtg(org.apache.poi.ss.formula.ptg.ParenthesisPtg) OperationPtg(org.apache.poi.ss.formula.ptg.OperationPtg) AttrPtg(org.apache.poi.ss.formula.ptg.AttrPtg) Stack(java.util.Stack) MemAreaPtg(org.apache.poi.ss.formula.ptg.MemAreaPtg) MemErrPtg(org.apache.poi.ss.formula.ptg.MemErrPtg)

Example 5 with AttrPtg

use of org.apache.poi.ss.formula.ptg.AttrPtg in project poi by apache.

the class TestXSSFFormulaParser method parseStructuredReferences.

@Test
public void parseStructuredReferences() throws IOException {
    XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx");
    XSSFEvaluationWorkbook fpb = XSSFEvaluationWorkbook.create(wb);
    Ptg[] ptgs;
    /*
        The following cases are tested (copied from FormulaParser.parseStructuredReference)
           1 Table1[col]
           2 Table1[[#Totals],[col]]
           3 Table1[#Totals]
           4 Table1[#All]
           5 Table1[#Data]
           6 Table1[#Headers]
           7 Table1[#Totals]
           8 Table1[#This Row]
           9 Table1[[#All],[col]]
          10 Table1[[#Headers],[col]]
          11 Table1[[#Totals],[col]]
          12 Table1[[#All],[col1]:[col2]]
          13 Table1[[#Data],[col1]:[col2]]
          14 Table1[[#Headers],[col1]:[col2]]
          15 Table1[[#Totals],[col1]:[col2]]
          16 Table1[[#Headers],[#Data],[col2]]
          17 Table1[[#This Row], [col1]]
          18 Table1[ [col1]:[col2] ]
        */
    final String tbl = "\\_Prime.1";
    final String noTotalsRowReason = ": Tables without a Totals row should return #REF! on [#Totals]";
    ////// Case 1: Evaluate Table1[col] with apostrophe-escaped #-signs ////////
    ptgs = parse(fpb, "SUM(" + tbl + "[calc='#*'#])");
    assertEquals(2, ptgs.length);
    // Area3DPxg [sheet=Table ! A2:A7]
    assertTrue(ptgs[0] instanceof Area3DPxg);
    Area3DPxg ptg0 = (Area3DPxg) ptgs[0];
    assertEquals("Table", ptg0.getSheetName());
    assertEquals("A2:A7", ptg0.format2DRefAsString());
    // Note: structured references are evaluated and resolved to regular 3D area references.
    assertEquals("Table!A2:A7", ptg0.toFormulaString());
    // AttrPtg [sum ]
    assertTrue(ptgs[1] instanceof AttrPtg);
    AttrPtg ptg1 = (AttrPtg) ptgs[1];
    assertTrue(ptg1.isSum());
    ////// Case 1: Evaluate "Table1[col]" ////////
    ptgs = parse(fpb, tbl + "[Name]");
    assertEquals(1, ptgs.length);
    assertEquals("Table1[col]", "Table!B2:B7", ptgs[0].toFormulaString());
    ////// Case 2: Evaluate "Table1[[#Totals],[col]]" ////////
    ptgs = parse(fpb, tbl + "[[#Totals],[col]]");
    assertEquals(1, ptgs.length);
    assertEquals("Table1[[#Totals],[col]]" + noTotalsRowReason, ErrPtg.REF_INVALID, ptgs[0]);
    ////// Case 3: Evaluate "Table1[#Totals]" ////////
    ptgs = parse(fpb, tbl + "[#Totals]");
    assertEquals(1, ptgs.length);
    assertEquals("Table1[#Totals]" + noTotalsRowReason, ErrPtg.REF_INVALID, ptgs[0]);
    ////// Case 4: Evaluate "Table1[#All]" ////////
    ptgs = parse(fpb, tbl + "[#All]");
    assertEquals(1, ptgs.length);
    assertEquals("Table1[#All]", "Table!A1:C7", ptgs[0].toFormulaString());
    ////// Case 5: Evaluate "Table1[#Data]" (excludes Header and Data rows) ////////
    ptgs = parse(fpb, tbl + "[#Data]");
    assertEquals(1, ptgs.length);
    assertEquals("Table1[#Data]", "Table!A2:C7", ptgs[0].toFormulaString());
    ////// Case 6: Evaluate "Table1[#Headers]" ////////
    ptgs = parse(fpb, tbl + "[#Headers]");
    assertEquals(1, ptgs.length);
    assertEquals("Table1[#Headers]", "Table!A1:C1", ptgs[0].toFormulaString());
    ////// Case 7: Evaluate "Table1[#Totals]" ////////
    ptgs = parse(fpb, tbl + "[#Totals]");
    assertEquals(1, ptgs.length);
    assertEquals("Table1[#Totals]" + noTotalsRowReason, ErrPtg.REF_INVALID, ptgs[0]);
    ////// Case 8: Evaluate "Table1[#This Row]" ////////
    ptgs = parse(fpb, tbl + "[#This Row]", 2);
    assertEquals(1, ptgs.length);
    assertEquals("Table1[#This Row]", "Table!A3:C3", ptgs[0].toFormulaString());
    ////// Evaluate "Table1[@]" (equivalent to "Table1[#This Row]") ////////
    ptgs = parse(fpb, tbl + "[@]", 2);
    assertEquals(1, ptgs.length);
    assertEquals("Table!A3:C3", ptgs[0].toFormulaString());
    ////// Evaluate "Table1[#This Row]" when rowIndex is outside Table ////////
    ptgs = parse(fpb, tbl + "[#This Row]", 10);
    assertEquals(1, ptgs.length);
    assertEquals("Table1[#This Row]", ErrPtg.VALUE_INVALID, ptgs[0]);
    ////// Evaluate "Table1[@]" when rowIndex is outside Table ////////
    ptgs = parse(fpb, tbl + "[@]", 10);
    assertEquals(1, ptgs.length);
    assertEquals("Table1[@]", ErrPtg.VALUE_INVALID, ptgs[0]);
    ////// Evaluate "Table1[[#Data],[col]]" ////////
    ptgs = parse(fpb, tbl + "[[#Data], [Number]]");
    assertEquals(1, ptgs.length);
    assertEquals("Table1[[#Data],[col]]", "Table!C2:C7", ptgs[0].toFormulaString());
    ////// Case 9: Evaluate "Table1[[#All],[col]]" ////////
    ptgs = parse(fpb, tbl + "[[#All], [Number]]");
    assertEquals(1, ptgs.length);
    assertEquals("Table1[[#All],[col]]", "Table!C1:C7", ptgs[0].toFormulaString());
    ////// Case 10: Evaluate "Table1[[#Headers],[col]]" ////////
    ptgs = parse(fpb, tbl + "[[#Headers], [Number]]");
    assertEquals(1, ptgs.length);
    // also acceptable: Table1!B1
    assertEquals("Table1[[#Headers],[col]]", "Table!C1:C1", ptgs[0].toFormulaString());
    ////// Case 11: Evaluate "Table1[[#Totals],[col]]" ////////
    ptgs = parse(fpb, tbl + "[[#Totals],[Name]]");
    assertEquals(1, ptgs.length);
    assertEquals("Table1[[#Totals],[col]]" + noTotalsRowReason, ErrPtg.REF_INVALID, ptgs[0]);
    ////// Case 12: Evaluate "Table1[[#All],[col1]:[col2]]" ////////
    ptgs = parse(fpb, tbl + "[[#All], [Name]:[Number]]");
    assertEquals(1, ptgs.length);
    assertEquals("Table1[[#All],[col1]:[col2]]", "Table!B1:C7", ptgs[0].toFormulaString());
    ////// Case 13: Evaluate "Table1[[#Data],[col]:[col2]]" ////////
    ptgs = parse(fpb, tbl + "[[#Data], [Name]:[Number]]");
    assertEquals(1, ptgs.length);
    assertEquals("Table1[[#Data],[col]:[col2]]", "Table!B2:C7", ptgs[0].toFormulaString());
    ////// Case 14: Evaluate "Table1[[#Headers],[col1]:[col2]]" ////////
    ptgs = parse(fpb, tbl + "[[#Headers], [Name]:[Number]]");
    assertEquals(1, ptgs.length);
    assertEquals("Table1[[#Headers],[col1]:[col2]]", "Table!B1:C1", ptgs[0].toFormulaString());
    ////// Case 15: Evaluate "Table1[[#Totals],[col]:[col2]]" ////////
    ptgs = parse(fpb, tbl + "[[#Totals], [Name]:[Number]]");
    assertEquals(1, ptgs.length);
    assertEquals("Table1[[#Totals],[col]:[col2]]" + noTotalsRowReason, ErrPtg.REF_INVALID, ptgs[0]);
    ////// Case 16: Evaluate "Table1[[#Headers],[#Data],[col]]" ////////
    ptgs = parse(fpb, tbl + "[[#Headers],[#Data],[Number]]");
    assertEquals(1, ptgs.length);
    assertEquals("Table1[[#Headers],[#Data],[col]]", "Table!C1:C7", ptgs[0].toFormulaString());
    ////// Case 17: Evaluate "Table1[[#This Row], [col1]]" ////////
    ptgs = parse(fpb, tbl + "[[#This Row], [Number]]", 2);
    assertEquals(1, ptgs.length);
    // also acceptable: Table!C3
    assertEquals("Table1[[#This Row], [col1]]", "Table!C3:C3", ptgs[0].toFormulaString());
    ////// Case 18: Evaluate "Table1[[col]:[col2]]" ////////
    ptgs = parse(fpb, tbl + "[[Name]:[Number]]");
    assertEquals(1, ptgs.length);
    assertEquals("Table1[[col]:[col2]]", "Table!B2:C7", ptgs[0].toFormulaString());
    wb.close();
}
Also used : Area3DPxg(org.apache.poi.ss.formula.ptg.Area3DPxg) Ptg(org.apache.poi.ss.formula.ptg.Ptg) Area3DPtg(org.apache.poi.ss.formula.ptg.Area3DPtg) NamePtg(org.apache.poi.ss.formula.ptg.NamePtg) MemAreaPtg(org.apache.poi.ss.formula.ptg.MemAreaPtg) AttrPtg(org.apache.poi.ss.formula.ptg.AttrPtg) IntersectionPtg(org.apache.poi.ss.formula.ptg.IntersectionPtg) IntPtg(org.apache.poi.ss.formula.ptg.IntPtg) FuncVarPtg(org.apache.poi.ss.formula.ptg.FuncVarPtg) RefPtg(org.apache.poi.ss.formula.ptg.RefPtg) FuncPtg(org.apache.poi.ss.formula.ptg.FuncPtg) MemFuncPtg(org.apache.poi.ss.formula.ptg.MemFuncPtg) Ref3DPtg(org.apache.poi.ss.formula.ptg.Ref3DPtg) StringPtg(org.apache.poi.ss.formula.ptg.StringPtg) AreaPtg(org.apache.poi.ss.formula.ptg.AreaPtg) ErrPtg(org.apache.poi.ss.formula.ptg.ErrPtg) ParenthesisPtg(org.apache.poi.ss.formula.ptg.ParenthesisPtg) AttrPtg(org.apache.poi.ss.formula.ptg.AttrPtg) Test(org.junit.Test)

Aggregations

AttrPtg (org.apache.poi.ss.formula.ptg.AttrPtg)9 Ptg (org.apache.poi.ss.formula.ptg.Ptg)8 FuncPtg (org.apache.poi.ss.formula.ptg.FuncPtg)7 FuncVarPtg (org.apache.poi.ss.formula.ptg.FuncVarPtg)7 IntPtg (org.apache.poi.ss.formula.ptg.IntPtg)7 RefPtg (org.apache.poi.ss.formula.ptg.RefPtg)7 StringPtg (org.apache.poi.ss.formula.ptg.StringPtg)7 AddPtg (org.apache.poi.ss.formula.ptg.AddPtg)6 BoolPtg (org.apache.poi.ss.formula.ptg.BoolPtg)6 MultiplyPtg (org.apache.poi.ss.formula.ptg.MultiplyPtg)6 LessEqualPtg (org.apache.poi.ss.formula.ptg.LessEqualPtg)4 LessThanPtg (org.apache.poi.ss.formula.ptg.LessThanPtg)4 MemAreaPtg (org.apache.poi.ss.formula.ptg.MemAreaPtg)4 MemFuncPtg (org.apache.poi.ss.formula.ptg.MemFuncPtg)4 NotEqualPtg (org.apache.poi.ss.formula.ptg.NotEqualPtg)4 ParenthesisPtg (org.apache.poi.ss.formula.ptg.ParenthesisPtg)4 Area3DPtg (org.apache.poi.ss.formula.ptg.Area3DPtg)3 AreaPtg (org.apache.poi.ss.formula.ptg.AreaPtg)3 ErrPtg (org.apache.poi.ss.formula.ptg.ErrPtg)3 IntersectionPtg (org.apache.poi.ss.formula.ptg.IntersectionPtg)3