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
我想用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