Ejemplo n.º 1
0
        /// <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);
        }