c# - 使用公式进行计算的用户友好方式
问题描述
我有一个对象模型,我需要用户能够基于它创建公式,并且还可以使用一些内置函数。例如:
AddWorkDays(MyObject.StartDate, 3)
MyObject 具有用户可以访问的各种属性。我们可能还需要做一些 If/Then 语句。用户对 Excel 公式非常熟悉,因为这是他们目前的工作方式。
我看到两种可能的选择:
- 使用众多可用的 C# 库之一创建我自己的解析器
- 调整基于 Excel 的解析器以了解我的对象的上下文。
选项 1 的问题是我不想重新发明轮子。我希望有人已经构建了一个可以处理基本函数和数学运算并且基于传入的类的上下文感知的解析器。我似乎找不到这样的东西。
选项 2 将允许用户重新使用他们现有的 Excel 知识来构建公式,例如:
=if(MyObject.Type = "A", AddWorkDays(MyObject.StartDate, 3), AddWorkDays(MyObject.StartDate, 5)
我看到 XLParser 被宣传为非常适合解析 Excel 公式,但似乎我需要添加上下文感知部分来读取和验证 MyObject 上的属性。
欢迎任何关于如何进行的经验、示例、警告等
解决方案
我通过使用 FLEE 库解决了这个问题:https ://github.com/mparlak/Flee
它支持“上下文”,您可以在其中定义应该在上下文中的变量。开箱即用,它支持诸如加法、减法甚至基本 IF 语句之类的常规语法。添加自己的功能很容易扩展。我通过定义一些常用函数使其类似于 Excel:AND、OR、MIN、MAX。只需不到 100 行代码即可完成。
我用它来处理相对较大的数据集(200,000 个项目,每个项目有 5 个公式),如果使用正确,它可以在 10 秒内处理。
推荐阅读
- openseadragon - OpenSeadragon 中的 RemoveHandler
- python - 无法从 Python 应用程序执行 Excel SQL 查询
- lua - (Lua)当内部的 if 语句停止时,while 语句停止
- python - python - 如何为包含python中特定字符串的所有列选择一个子集?
- java - Spring Batch - 作业未启动,因为 ORA-14400:插入的分区键未映射到任何分区
- amazon-web-services - AWS CLI 不会检测/接受凭证
- asp.net-core - 更改安全印章
- excel - 查找双精度值
- postgresql - 在基于 postgres 数据库的数据仓库中实现继承的最佳方法
- spring-boot - Spring-boot:原型范围bean:如何检查具有相同值的bean是否已经存在?