用户友好的方式来使用公式进行计算

时间:2019-03-19 05:28:29

标签: c# parsing excel-formula

我有一个对象模型,我需要用户能够基于该对象模型创建公式,并且还需要使用一些内置函数。例如:

AddWorkDays(MyObject.StartDate, 3)

MyObject具有用户可以访问的各种属性。我们可能还需要执行一些If / Then语句。用户对Excel公式非常熟悉,因为这是他们当前的工作方式。

我看到两个可能的选择:

  1. 使用众多可用的C#库之一创建自己的解析器
  2. 使基于Excel的解析器适应于上下文,以了解我的对象。

选项1的问题是我不想重新发明轮子。我希望有人已经构建了一个解析器,可以处理基本功能和数学运算,并且基于传入的类对上下文具有感知能力。我似乎找不到类似的东西。

选项2将允许用户重用他们现有的Excel知识来构建公式,例如:

=if(MyObject.Type = "A", AddWorkDays(MyObject.StartDate, 3), AddWorkDays(MyObject.StartDate, 5)

我看到XLParser被宣传为非常适合解析Excel公式,但是似乎我需要添加Context-aware部分来读取和验证MyObject上的属性。

欢迎任何有关进行操作的经验,示例,警告等

1 个答案:

答案 0 :(得分:0)

我通过使用FLEE库解决了此问题:https://github.com/mparlak/Flee

它支持“上下文”,您可以在其中定义应在上下文中的变量。开箱即用,它支持诸如加,减,甚至是基本IF语句之类的常规语法。添加您自己的功能很容易扩展。通过定义一些常用函数,我使它像Excel一样:AND,OR,MIN,MAX。这只需要执行不到100行代码。

我用它来处理相对较大的数据集(200,000个项目,每个项目有5个公式),如果使用正确,它将在10秒内处理完。