Search in sources :

Example 1 with RefPtg

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

the class TestFormulaParser method testZeroRowRefs.

/**
     * Zero is not a valid row number so cell references like 'A0' are not valid.
     * Actually, they should be treated like defined names.
     * <br/>
     * In addition, leading zeros (on the row component) should be removed from cell
     * references during parsing.
     */
@Test
public void testZeroRowRefs() throws IOException {
    // bad because zero is not a valid row number
    String badCellRef = "B0";
    // this should get parsed as "B1"
    String leadingZeroCellRef = "B000001";
    HSSFWorkbook wb = new HSSFWorkbook();
    try {
        HSSFFormulaParser.parse(badCellRef, wb);
        fail("Identified bug 47312b - Shouldn't be able to parse cell ref '" + badCellRef + "'.");
    } catch (FormulaParseException e) {
        // expected during successful test
        confirmParseException(e, "Specified named range '" + badCellRef + "' does not exist in the current workbook.");
    }
    Ptg[] ptgs;
    try {
        ptgs = HSSFFormulaParser.parse(leadingZeroCellRef, wb);
        assertEquals("B1", ((RefPtg) ptgs[0]).toFormulaString());
    } catch (FormulaParseException e) {
        confirmParseException(e, "Specified named range '" + leadingZeroCellRef + "' does not exist in the current workbook.");
        // close but no cigar
        fail("Identified bug 47312c - '" + leadingZeroCellRef + "' should parse as 'B1'.");
    }
    // create a defined name called 'B0' and try again
    Name n = wb.createName();
    n.setNameName("B0");
    n.setRefersToFormula("1+1");
    ptgs = HSSFFormulaParser.parse("B0", wb);
    confirmTokenClasses(ptgs, NamePtg.class);
    wb.close();
}
Also used : FormulaParseException(org.apache.poi.ss.formula.FormulaParseException) 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) UnicodeString(org.apache.poi.hssf.record.common.UnicodeString) HSSFWorkbook(org.apache.poi.hssf.usermodel.HSSFWorkbook) Name(org.apache.poi.ss.usermodel.Name) TestHSSFName(org.apache.poi.hssf.usermodel.TestHSSFName) HSSFName(org.apache.poi.hssf.usermodel.HSSFName) Test(org.junit.Test)

Example 2 with RefPtg

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

the class TestFormulaParser method test57196_Formula.

@Test
public void test57196_Formula() throws IOException {
    HSSFWorkbook wb = new HSSFWorkbook();
    Ptg[] ptgs = HSSFFormulaParser.parse("DEC2HEX(HEX2DEC(O8)-O2+D2)", wb, FormulaType.CELL, -1);
    assertNotNull("Ptg array should not be null", ptgs);
    confirmTokenClasses(ptgs, // ??
    NameXPtg.class, // ??
    NameXPtg.class, // O8
    RefPtg.class, // HEX2DEC
    FuncVarPtg.class, // O2
    RefPtg.class, SubtractPtg.class, // D2
    RefPtg.class, AddPtg.class, // DEC2HEX
    FuncVarPtg.class);
    RefPtg o8 = (RefPtg) ptgs[2];
    FuncVarPtg hex2Dec = (FuncVarPtg) ptgs[3];
    RefPtg o2 = (RefPtg) ptgs[4];
    RefPtg d2 = (RefPtg) ptgs[6];
    FuncVarPtg dec2Hex = (FuncVarPtg) ptgs[8];
    assertEquals("O8", o8.toFormulaString());
    assertEquals(255, hex2Dec.getFunctionIndex());
    //assertEquals("", hex2Dec.toString());
    assertEquals("O2", o2.toFormulaString());
    assertEquals("D2", d2.toFormulaString());
    assertEquals(255, dec2Hex.getFunctionIndex());
    wb.close();
}
Also used : 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) FuncVarPtg(org.apache.poi.ss.formula.ptg.FuncVarPtg) RefPtg(org.apache.poi.ss.formula.ptg.RefPtg) HSSFWorkbook(org.apache.poi.hssf.usermodel.HSSFWorkbook) Test(org.junit.Test)

Example 3 with RefPtg

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

the class TestCFRuleRecord method testReserializeRefNTokens.

/**
     * tRefN and tAreaN tokens must be preserved when re-serializing conditional format formulas
     */
@Test
public void testReserializeRefNTokens() {
    RecordInputStream is = TestcaseRecordInputStream.create(CFRuleRecord.sid, DATA_REFN);
    CFRuleRecord rr = new CFRuleRecord(is);
    Ptg[] ptgs = rr.getParsedExpression1();
    assertEquals(3, ptgs.length);
    if (ptgs[0] instanceof RefPtg) {
        throw new AssertionFailedError("Identified bug 45234");
    }
    assertEquals(RefNPtg.class, ptgs[0].getClass());
    RefNPtg refNPtg = (RefNPtg) ptgs[0];
    assertTrue(refNPtg.isColRelative());
    assertTrue(refNPtg.isRowRelative());
    byte[] data = rr.serialize();
    TestcaseRecordInputStream.confirmRecordEncoding(CFRuleRecord.sid, DATA_REFN, data);
}
Also used : Ptg(org.apache.poi.ss.formula.ptg.Ptg) RefPtg(org.apache.poi.ss.formula.ptg.RefPtg) RefNPtg(org.apache.poi.ss.formula.ptg.RefNPtg) RefNPtg(org.apache.poi.ss.formula.ptg.RefNPtg) RefPtg(org.apache.poi.ss.formula.ptg.RefPtg) AssertionFailedError(junit.framework.AssertionFailedError) Test(org.junit.Test)

Example 4 with RefPtg

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

the class EmbeddedObjectRefSubRecord method readRefPtg.

private static Ptg readRefPtg(byte[] formulaRawBytes) {
    LittleEndianInput in = new LittleEndianInputStream(new ByteArrayInputStream(formulaRawBytes));
    byte ptgSid = in.readByte();
    switch(ptgSid) {
        case AreaPtg.sid:
            return new AreaPtg(in);
        case Area3DPtg.sid:
            return new Area3DPtg(in);
        case RefPtg.sid:
            return new RefPtg(in);
        case Ref3DPtg.sid:
            return new Ref3DPtg(in);
    }
    return null;
}
Also used : LittleEndianInput(org.apache.poi.util.LittleEndianInput) ByteArrayInputStream(java.io.ByteArrayInputStream) Area3DPtg(org.apache.poi.ss.formula.ptg.Area3DPtg) LittleEndianInputStream(org.apache.poi.util.LittleEndianInputStream) AreaPtg(org.apache.poi.ss.formula.ptg.AreaPtg) RefPtg(org.apache.poi.ss.formula.ptg.RefPtg) Ref3DPtg(org.apache.poi.ss.formula.ptg.Ref3DPtg)

Example 5 with RefPtg

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

the class TestTextObjectRecord method testLinkFormula.

public void testLinkFormula() {
    RecordInputStream is = new RecordInputStream(new ByteArrayInputStream(linkData));
    is.nextRecord();
    TextObjectRecord rec = new TextObjectRecord(is);
    Ptg ptg = rec.getLinkRefPtg();
    assertNotNull(ptg);
    assertEquals(RefPtg.class, ptg.getClass());
    RefPtg rptg = (RefPtg) ptg;
    assertEquals("T2", rptg.toFormulaString());
    byte[] data2 = rec.serialize();
    assertEquals(linkData.length, data2.length);
    assertArrayEquals(linkData, data2);
}
Also used : Ptg(org.apache.poi.ss.formula.ptg.Ptg) RefPtg(org.apache.poi.ss.formula.ptg.RefPtg) ByteArrayInputStream(java.io.ByteArrayInputStream) RefPtg(org.apache.poi.ss.formula.ptg.RefPtg)

Aggregations

RefPtg (org.apache.poi.ss.formula.ptg.RefPtg)8 Ptg (org.apache.poi.ss.formula.ptg.Ptg)7 AreaPtg (org.apache.poi.ss.formula.ptg.AreaPtg)4 FuncVarPtg (org.apache.poi.ss.formula.ptg.FuncVarPtg)4 Area3DPtg (org.apache.poi.ss.formula.ptg.Area3DPtg)3 AttrPtg (org.apache.poi.ss.formula.ptg.AttrPtg)3 FuncPtg (org.apache.poi.ss.formula.ptg.FuncPtg)3 IntPtg (org.apache.poi.ss.formula.ptg.IntPtg)3 Ref3DPtg (org.apache.poi.ss.formula.ptg.Ref3DPtg)3 Test (org.junit.Test)3 ByteArrayInputStream (java.io.ByteArrayInputStream)2 AssertionFailedError (junit.framework.AssertionFailedError)2 HSSFWorkbook (org.apache.poi.hssf.usermodel.HSSFWorkbook)2 AbstractFunctionPtg (org.apache.poi.ss.formula.ptg.AbstractFunctionPtg)2 AddPtg (org.apache.poi.ss.formula.ptg.AddPtg)2 ArrayPtg (org.apache.poi.ss.formula.ptg.ArrayPtg)2 BoolPtg (org.apache.poi.ss.formula.ptg.BoolPtg)2 ConcatPtg (org.apache.poi.ss.formula.ptg.ConcatPtg)2 DividePtg (org.apache.poi.ss.formula.ptg.DividePtg)2 EqualPtg (org.apache.poi.ss.formula.ptg.EqualPtg)2