Class FormulaParser


  • @Internal
    public final class FormulaParser
    extends Object
    This class parses a formula string into a List of tokens in RPN order. Inspired by "Lets Build a Compiler" by Jack Crenshaw BNF for the formula expression is :
    
     <expression> ::= <term> [<addop> <term>]*
     <term> ::= <factor>  [ <mulop> <factor> ]*
     <factor> ::= <number> | (<expression>) | <cellRef> | <function>
     <function> ::= <functionName> ([expression [, expression]*])
     

    For POI internal use only

    • Method Detail

      • parse

        public static Ptg[] parse​(String formula,
                                  FormulaParsingWorkbook workbook,
                                  FormulaType formulaType,
                                  int sheetIndex,
                                  int rowIndex)
        Parse a formula into an array of tokens Side effect: creates name (Workbook.createName()) if formula contains unrecognized names (names are likely UDFs)
        Parameters:
        formula - the formula to parse
        workbook - the parent workbook
        formulaType - the type of the formula
        sheetIndex - the 0-based index of the sheet this formula belongs to. The sheet index is required to resolve sheet-level names. -1 means that the scope of the name will be ignored and the parser will match names only by name
        rowIndex - - the related cell's row index in 0-based form (-1 if the formula is not cell related) used to handle structured references that have the "#This Row" quantifier. Use rowIndex=-1 or parseStructuredReference(String, FormulaParsingWorkbook, int) if formula does not contain structured references.
        Returns:
        array of parsed tokens
        Throws:
        FormulaParseException - if the formula has incorrect syntax or is otherwise invalid
      • parse

        public static Ptg[] parse​(String formula,
                                  FormulaParsingWorkbook workbook,
                                  FormulaType formulaType,
                                  int sheetIndex)
        Parse a formula into an array of tokens Side effect: creates name (Workbook.createName()) if formula contains unrecognized names (names are likely UDFs)
        Parameters:
        formula - the formula to parse
        workbook - the parent workbook
        formulaType - the type of the formula
        sheetIndex - the 0-based index of the sheet this formula belongs to. The sheet index is required to resolve sheet-level names. -1 means that the scope of the name will be ignored and the parser will match names only by name
        Returns:
        array of parsed tokens
        Throws:
        FormulaParseException - if the formula has incorrect syntax or is otherwise invalid
      • parseStructuredReference

        public static Area3DPxg parseStructuredReference​(String tableText,
                                                         FormulaParsingWorkbook workbook,
                                                         int rowIndex)
        Parse a structured reference. Converts the structured reference to the area that represent it.
        Parameters:
        tableText - - The structured reference text
        workbook - - the parent workbook
        rowIndex - - the 0-based cell's row index ( used to handle "#This Row" quantifiers )
        Returns:
        the area that being represented by the structured reference.