字符串中的 C# 分析公式,类似于 Excel

本文关键字:类似于 Excel 字符串 | 更新日期: 2023-09-27 18:32:07

有没有办法或.NET中的库来制作类似于Excel的东西?

例如:我有一个对象Invoice与以下成员 int Year int Number string Customer

和字符串中的"公式" - 例如"right(string(Year), 2) + '"/'" + string(Number, '"000000'""

我想从对象和"公式"字符串动态生成一个字符串(类似于 Excel,但当然没有 Excel)

类似于 NCalc 主要用于数学表达式,但更专注于字符串公式......

字符串中的 C# 分析公式,类似于 Excel

我刚才做了这样的事情。我只是编译表达式运行时。有关教程,可以查看此处:动态编译 C# 代码演练

为这类事情编写一个非常简单的解释器并不像你想象的那么困难,特别是如果你保持公式的风格FunctionName(Parameter, Parameter2 ...)。 我曾经在一天内做过类似的事情。你也许可以使用一个名为CONCATENATE(àla Excel)的函数而不是+运算符来保持简单。

一种方法是编写一个简单的语言对象模型,其中包含要支持的每个函数的类,例如:

public abstract class ScriptFunction
{
     public abstract string Name { get; }
     public abstract int ParameterCount { get; }
     public abstract object Execute(params object[] parameters);
}

。然后编写一个递归 Eval 函数,该函数检查提供的脚本字符串,使用括号作为分隔符提取函数的名称和参数,查找要调用的 ScriptFunction,然后对其调用 Execute。

与动态编译相比,此方法的优点是,您知道代码只能执行您编程要执行的操作,而对于将表达式编译为 C# 代码的内容,您必须小心用户不会输入对应用程序的其余部分造成灾难性影响的内容。

有关更高级的方法,请参阅正则表达式以匹配函数并捕获其参数

您可能可以使用面向方面的插件(例如Post Sharp)来执行此操作,该插件基本上允许运行时代码执行。