componentone studio 使用教程:CalcEngine控件的使用方法与功能介绍

ComponentOne Studio Enterprise最新试用版

该库可用于:

  • 解析和评估公式(例如Microsoft Excel)。
  • 计算销售预测或统计计算以找到数据模式。
  • 将数据从内存中的业务对象加载到DataGrid或显示计算值。
  • 使用变量评估代数表达式,数学函数和公式。

CalcEngine入门

要开始使用CalcEngine,请创建一个.NET Framework 4.6.2+或.NET Core应用程序,然后将nuget.org中的C1.CalcEngine NuGet包添加到项目中。

创建简单表达式

如果您曾经使用过Excel,则使用CalcEngine创建和评估表达式非常简单明了。在这里,我们演示如何创建分配给CalcEngine的Expression属性的简单表达式,以及如何使用Evaluate函数获取结果。

var calcEngine = new C1CalcEngine();  calcEngine.Expression = “5+2”;  var result = calcEngine.Evaluate()

CalcEngine还支持带有函数的更复杂的表达式。它支持Excel中的文本,日期时间,数学,逻辑,转换和聚合函数,以及各种常量和运算符。

使用数据绑定跨数据源执行计算

CalcEngine可以绑定到列表,数组或数据表等数据源。这有助于在对象和数据字段的集合上执行计算。在这里,我们有一个Store对象的集合,并使用CalcEngine将表达式应用于整个集合或单个对象。

public class Store  {      public int StoreId { get; set; }      public double Sales { get; set; }  }var collection = new List() { new Store { StoreId = 27, Sales = 150000.00 }, new Store { StoreId = 15, Sales = 20000.00 } };// 1. When you have to apply expression over an object:  var engine = new 1CalcEngine ();  engine.DataSource = collection[0];  engine.Expression = "[Sales]*2";

// 2. When you have collection and aggregate function:  var engine = new 1CalcEngine ();  engine.DataSource = collection;  engine.Expression = "Sum([Sales])";  var result = engine.Evaluate();

// 3. When you have collection and need evaluate one entry:  var engine = new C1CalcEngine();  engine.DataSource = collection;  engine.CurrentIndex = 1;  engine.Expression = "[Sales] / Sum([Sales])";  var result = engine.Evaluate();

处理多个数据收集

当信息分散到多个集合中时,很难一起处理这些数据。这是交叉引用会有所帮助的地方。在这种情况下,可以使用内置的Excel引擎的跨工作表引用。在交叉表引用中,单元格引用包括对另一个表中单元格的引用。

与Excel一样,它可以用在公式中,在该公式中输入目标工作表的名称,然后在单元格引用或单元格范围引用之前输入一个惊叹 (!)。

calcEngine.Expression = "=Sum(Sheet1!A3:B7) + Sum(Sheet2!A3:B7)";

为了能够创建上述表达式,每个数据源都应从实现GetValue()函数的IDataSheet派生:

 public class SheetTable : DataTable, IDataSheet    {        public string Name        {            get => TableName;            set => TableName = value;        }        public object GetValue(int col, int row)        {            return Rows[row][col];        }    }
//Method to generate data for C1CalcEngine    private const string columnNames = "ABCDEF";    var sheet1 = GetDataTable("Sheet1");     var sheet2 = GetDataTable("Sheet2");    public static SheetTable GetDataTable(string sheetName)    {        var table = new SheetTable();        table.Name = sheetName;        foreach (var col in columnNames)            table.Columns.Add(col.ToString(), typeof(int));        for (int i = 0; i < 100; i++) table.Rows.Add(new object[] { i * 2, i * 3, i * 4, i * 5, i * 6, i * 7 }); return table; }

最后,可以如下创建跨表表达式:

 C1CalcEngine calcEngine = new C1CalcEngine(); calcEngine.DataSource = new List { sheet1, sheet2 };            //Assign the cross sheet reference expression to be calculated by C1CalcEngine            calcEngine.Expression = "=Sum(Sheet1!A3:B7) + Sum(Sheet2!A3:B7)";            //Invoke the TryEvaluate method of C1CalcEngine to calculate the expression            var res = calcEngine.TryEvaluate(out object result) result.ToString() : calcEngine.GetErrors().FirstOrDefault()FullMessage  "";

下图显示了交叉表引用的示例,其中从单元格引用中解析了表达式。
ComponentOne WinForms Edition中提供了此示例:

componentone studio 使用教程:CalcEngine控件的使用方法与功能介绍

ComponentOne CalcEngine是一个功能强大的库,可以解决许多业务用例。componentone calcengine是一个功能强大的库,可以解决许多业务用例。欢迎使用="">,有任何问题欢迎回帖讨论

如果你对我们的产品感兴趣或者有任何疑问,欢迎咨询在线客服>>

高端UI界面开发
标签:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年6月11日
下一篇 2020年6月11日

相关推荐

发表回复

登录后才能评论