EPPlus:用户定义函数计算

时间:2016-10-08 04:37:27

标签: c# excel-vba epplus vba excel

我想使用EPPlus输入数据并进行计算。 Here is my excel files and user defined function 这是我的代码:

ExcelWorksheet sheet = ep.Workbook.Worksheets["input"];
sheet.Cells[1, 1].Value = 10;
ep.Workbook.Calculate();
string test = sheet.Cells[1, 5].Text;
ep.Save();

字符串测试是“#NAME?”

似乎EPPlus没有加载用户定义功能。

当我打开保存的文件时,计算将自动完成。

如何使用户定义的功能起作用?

(我稍后会在ASP.NET中使用此功能来调用存在的excel文件中的用户定义函数。我尝试过Interop,它可以实现我想要的,但速度要慢很多。)

谢谢!

3 个答案:

答案 0 :(得分:2)

EPPlus中的公式计算引擎无法在工作簿中执行VBA函数。它支持约。 150个常见的内置Excel公式,仅此而已。

但是,您可以在.NET代码中实现VBA功能。每个函数都应继承EPPlus类 ExcelFunction ,并通过Workbook.FormulaParserManager注册到EPPlus,给出与VBA函数相同的函数名。

有些示例在EPPlus示例项目中说明了这一点(创建自定义函数),可以从Codeplex下载。

对于4.1版,您可以在此处下载解决方案“EPPlus with samples”:

https://epplus.codeplex.com/releases/view/625020

然后转到“EPPlusSamples”项目并查看 SampleAddFormulaFunction.cs

答案 1 :(得分:1)

您需要在Epplus中创建一个vba项目,您可以在其中定义该功能。像这样:

var fileinfo = new FileInfo(@"c:\temp\UserDefinedFunctionTest.xlsm");
if (fileinfo.Exists)
    fileinfo.Delete();

var sb = new StringBuilder();
sb.AppendLine("Function test(a)");
sb.AppendLine("    test = a * 3");
sb.AppendLine("End Function");

using (var package = new ExcelPackage(fileinfo))
{
    var workbook = package.Workbook;
    var worksheet = workbook.Worksheets.Add("Sheet1");

    workbook.CreateVBAProject();
    var mod1 = workbook.VbaProject.Modules.AddModule("Module1");
    mod1.Code = sb.ToString();

    worksheet.Cells["A1"].Value = 5;
    worksheet.Cells["A2"].Formula = "=test(A1)";

    package.Save();
}

这将是这样的:

enter image description here

答案 2 :(得分:0)

您需要在ExcelWorkSheet

中设置公式

sheet.Cells[5, 5].Formula = "=A1*3";

这仅适用于第一行,如果您想要使用大量行,则必须使用循环和内部循环使用公式。