【问题标题】:Use names of named ranges in formula in Epplus在 Epplus 的公式中使用命名范围的名称
【发布时间】:2019-02-13 15:17:38
【问题描述】:

我在 .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

是否有可能以某种方式使用名称作为参数而不是单元格地址,例如“小时 * 价格”?

【问题讨论】:

    标签: epplus


    【解决方案1】:

    EPPlus Calculate() 似乎不支持公式中的命名范围。但是,如果您的控制台输出仅用于测试,则如果您保存文件并打开它,则公式计算正确。 IE。如果在 using 语句中添加 using (var package = new ExcelPackage(new FileInfo(someFileName)))package.Save();

    如果您的公式使用单元格地址,则控制台输出将是正确的(但猜测这对您来说还不够好):

    for (int col = 2; col < 5; col++)
        sheet.Cells[$"C{col}"].Formula = $"A{col} * B{col}";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多