EPPlus:User 定义函数计算

EPPlus:User define function calculate

我想用EPPlus输入数据并计算。 这是我的代码:

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中使用这个特性来调用现有的User define functions excel file.I试过Interop,它可以实现我想要的,但是很多慢一点。)

谢谢!

您需要在ExcelWorkSheet

中设置公式

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

这仅适用于第一行,如果您想在大量行中进行操作,则必须使用循环并在循环内使用公式。

您需要在 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();
}

看起来像这样:

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

但是,您可以在 .NET 代码中实现 VBA 函数。每个函数都应继承 EPPlus class ExcelFunction 并通过 Workbook.FormulaParserManager 注册到 EPPlus,并给定与 [=33= 相同的函数名称] 函数。

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

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

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

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