0

.NET 中是否有方法或库可以制作类似于 Excel 制作的东西?

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

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

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

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

4

3 回答 3

0

我前段时间做过类似的事情。我只是编译表达式运行时。对于教程,您可以在这里查看:动态编译 C# 代码的演练

于 2013-09-19T20:10:19.187 回答
0

为这类事情编写一个非常简单的解释器并不像您想象的那么困难,特别是如果您将公式保持为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# 代码的操作,您必须小心用户没有对应用程序的其余部分输入灾难性的东西。

有关更高级的方法,请参阅Regex 以匹配函数并捕获它们的参数

于 2013-09-19T20:48:30.403 回答
-1

您可能可以使用面向方面的插件来做到这一点,例如Post Sharp,它基本上允许运行时代码执行。

于 2013-09-19T20:06:18.217 回答