private EvaluationResult Evaluate(string name, string cell, IEnumerable <ExcelFormulaToken> tokens, ExpressionScope scope, ExpressionFormat format)
        {
            var result = new EvaluationResult()
            {
                Name = name,
                Cell = cell
            };

            try
            {
                var queue           = new Queue <ExcelFormulaToken>(tokens);
                var excelExpression = new ExcelExpression();
                TraverseExpression(excelExpression, queue, scope);
                var operand = excelExpression.Evaluate(scope);
                scope.Set(cell ?? name, operand.Value);
                result.Value = operand.Value.InnerValue;
                result.Text  = operand.Value?.ToString(outputLang, format);
            }
            catch (Exception ex)
            {
                result.Error = ex.Message;
            }
            finally { }
            return(result);
        }