epplus - 在 Epplus 的公式中使用命名范围的名称
问题描述
我在 .NET Core 应用程序中使用 Epplus,我想在公式中使用命名范围的名称。问题是当我引用一个命名范围时,它会获取范围中第一个单元格的值并且不遍历行:
var data = new List<object[]>()
{
new object[] {"Hours", "Price", "Total"},
new object[] {0.5, 10, 0},
new object[] {2, 100, 0},
new object[] {3, 20, 0}
};
using (var package = new ExcelPackage())
{
var sheet = package.Workbook.Worksheets.Add("Variables");
sheet.Cells["A1"].LoadFromArrays(data);
sheet.Names.Add("Hours", sheet.Cells["A2:A4"]);
sheet.Names.Add("Price", sheet.Cells["B2:B4"]);
sheet.Names.Add("Total", sheet.Cells["C2:C4"]);
sheet.Names["Total"].Formula = "Hours * Price";
package.Workbook.Calculate();
for (int i = 1; i <= sheet.Dimension.End.Row; i++)
{
Console.WriteLine($"{sheet.Cells[i, 1].Value}\t{sheet.Cells[i, 2].Value}\t{sheet.Cells[i, 3].Value}");
}
}
此代码将以下内容写入控制台:
Hours Price Total
0,5 10 5
2 100 5
3 20 5
但实际上我想得到这个:
Hours Price Total
0,5 10 5
2 100 200
3 20 60
是否有可能以某种方式使用名称作为参数而不是单元格地址来做到这一点,例如“小时*价格”?
解决方案
EPPlusCalculate()
似乎不支持公式中的命名范围。但是,如果您的控制台输出仅用于测试,则如果您保存文件并打开它,则公式计算正确。即,如果您在 using 语句中添加using (var package = new ExcelPackage(new FileInfo(someFileName)))
and 。package.Save();
如果您的公式使用单元格地址,则控制台输出将是正确的(但猜测这对您来说还不够好):
for (int col = 2; col < 5; col++)
sheet.Cells[$"C{col}"].Formula = $"A{col} * B{col}";
推荐阅读
- splunk - 如何在 Splunk 的一次搜索中添加多个查询
- c# - Book的练习--使用Timing类比较Collection类和ArrayList在每个添加1,000,000个整数时的性能
- sql - 如何在 Postgres 中将行转换为列?
- html - 如何制作局部附加的重复线性渐变
- javascript - 如何知道用户是刚刚创建还是已经使用 google signin 和 firebase web 9 存在?
- json - 如何在AngularJS中将给定的字符串转换为对象
- java - 在宁静中 BDD Driver.get(address) 抛出 java.lang.NoSuchMethodError: org.openqa.selenium.chrome.ChromeOptions.addArguments(Ljava/util/List;)
- r - 是否有将累积概率转换为正态分布的 R 函数?
- reactjs - 箭头图标中的 react-bootstrap 手风琴问题
- ruby-on-rails - 运行 rake neo4j 时出现问题:使用 neo4j.rb 迁移