internal void ParseUnresolvedReference(Cell cell) { if (UnresolvedRangeReference.IsNullOrEmpty()) { return; } Match match; ParseArgumentType pat = FormulaParser.GetArgumentType(UnresolvedRangeReference, out match); Range range; if (cell == null) { throw new ArgumentNullException("cell"); } bool parsed = FormulaParser.ParseRange(cell, match, out range, pat == ParseArgumentType.AbsoluteRange); if (parsed) { UnresolvedRangeReference = ""; CellFrom = range.CellFrom; CellTo = range.CellTo; } }
private static void ParseFormula(Cell cell, Formula formula, string formulaText) { Match match; ParseArgumentType pat = GetArgumentType(formulaText, out match); switch (pat) { case ParseArgumentType.Function: { string function = match.Groups["FunctionName"].Value; Formula subFormula = new Formula(); subFormula.Add(function).StartGroup(); string[] parameters = match.Groups["Parameters"].Value.Split(new [] { ',' }); foreach (string parameter in parameters) { ParseFormula(cell, subFormula, parameter); } subFormula.EndGroup(); formula.Add(subFormula); break; } case ParseArgumentType.Range: case ParseArgumentType.AbsoluteRange: { Range range = new Range(formulaText); formula.Add(range); break; } case ParseArgumentType.None: { formula.Add(formulaText); break; } } }