ExpressionVisitor Class
A base class for implementing a custom visitor to traverse the expression tree.
Namespace: DevExpress.Spreadsheet.Formulas
Assembly: DevExpress.Spreadsheet.v17.2.Core.dll
Declaration
Remarks
This example demonstrates how to use the FormulaEngine.Parse method to parse an expression and create an expression tree. The expression tree is available by using the ParsedExpression.Expression property.
You can use an expression tree visitor to traverse an existing expression tree and to perform required actions when it visits a specific node. To implement a visitor, create a descendant from the ExpressionVisitor class and override the ExpressionVisitor.Visit method which corresponds to the node type you wish to visit.
In this code snippet, the MyVisitor visitor changes the range reference to shift it down by one row.
After the visitor finishes, the ParsedExpression.ToString method is used to assemble a valid formula from the expression tree.
Note
A complete sample project is available at https://github.com/DevExpress-Examples/formula-engine-examples-of-use-t110344
using DevExpress.Spreadsheet;
using DevExpress.Spreadsheet.Formulas;
using DevExpress.Spreadsheet.Functions;
FormulaEngine engine = spreadsheetControl1.Document.FormulaEngine;
if (spreadsheetControl1.ActiveCell != null){
// Get the formula for parsing.
string formula = spreadsheetControl1.ActiveCell.Formula;
if (formula != string.Empty)
{
// Parse the formula
ParsedExpression p_expr = engine.Parse(formula);
// Traverse the expression tree and modify it.
MyVisitor visitor = new MyVisitor();
p_expr.Expression.Visit(visitor);
// Reconsitute the formula.
string formula1 = p_expr.ToString();
// Place the formula back to the cell.
spreadsheetControl1.ActiveCell.Formula = formula1;
}
Related GitHub Examples
The following code snippet (auto-collected from DevExpress Examples) contains a reference to the ExpressionVisitor class.
Note
The algorithm used to collect these code examples remains a work in progress. Accordingly, the links and snippets below may produce inaccurate results. If you encounter an issue with code examples below, please use the feedback form on this page to report the issue.