/// <summary> /// Interpret the expression contained by a cell, and return its value /// </summary> /// <param name="expression">the expression to interpret</param> /// <param name="cellToInterpret">the cell containing the expression</param> /// <returns>the interpreted value</returns> private string InterpretExpression(string expression, ref SpreadsheetCell cellToInterpret) { var expTree = new ExpTree(expression); string value = ""; var singleCellExpression = (SpreadsheetCell)GetCellFromStr(expression); if (null != singleCellExpression && singleCellExpression != cellToInterpret) { if (VerifyNoCycles(cellToInterpret, singleCellExpression)) { value = String.IsNullOrEmpty(singleCellExpression.Value) ? "0" : singleCellExpression.Value; Subscribe(cellToInterpret, singleCellExpression); } else { value = "#REF!"; } } else if (expTree.IsValidExpression()) { if (AssignExpTreeVars(ref cellToInterpret, ref expTree)) { value = expTree.Eval().ToString(); } else { value = "#REF!"; } } else { value = "#VALUE!"; } return(value); }