private static XLParser.FormulaAnalyzer GetParser(string formula) { if (formula[0] == '=') { formula = formula.Substring(1); } var parser = new XLParser.FormulaAnalyzer(formula); return(parser); }
public static void ParseFormula() { var _app = ExcelDnaUtil.Application; app = (Excel.Application)_app; ws = (Excel.Worksheet)app.ActiveSheet; Excel.Range rng = (Excel.Range)app.ActiveCell; Debug.Print(rng.Formula.ToString()); var parser = GetParser(rng); var root = parser.Root; var newFormula = GetFormulaForFunc(root, true, true, -1); Debug.Print("processed formula: " + newFormula); MessageBox.Show(newFormula); var newParser = new XLParser.FormulaAnalyzer(newFormula); var noSumVersion = GetFormulaWithoutSum(newParser.Root); Debug.Print("no sum version: " + noSumVersion); useSympyToCleanUpFormula(noSumVersion); //take that formula and process as math var exp = Infix.ParseOrThrow(noSumVersion); Debug.Print("mathdotnet verison: " + Infix.Format(exp)); Debug.Print("expanded verison: " + Infix.Format(Algebraic.Expand(exp))); Debug.Print("variables: " + string.Join(",", Structure.CollectIdentifierSymbols(exp).Select(c => c.Item))); //GenerateFullTreeWithReferences(root); }