无法使用C#从EPPlus调用Calculate方法

时间:2016-05-31 13:30:52

标签: c# excel epplus

我有一个带公式的单元格,我需要调用Calculate()方法,以获得结果。

不知怎的,我可以在我的工作表中的任何单元格上调用Calculate方法,我缺少什么?

我使用的是EPPlus 4.0.5.0版。 我的代码如下:

ws2.Cells[failedRow, failedColumn + 1].Formula = "SUM(B20:B" + (failedRow - 1) + ")";

我需要在同一个细胞上计算。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

XlsIO是一个读取和写入Excel 2003/2007/2010/2013/2016文件的.NET库。使用XlsIO,您可以非常轻松地计算单元格的公式。如果您符合条件,则可以通过community license program免费获得整套控件(商业应用程序)。社区许可是完整的产品,没有任何限制或水印。

步骤1:创建控制台应用程序 第2步:添加对Syncfusion.XlsIO.Base和Syncfusion.Compression.Base的引用;您也可以使用NuGet将这些引用添加到项目中。 第3步:复制&粘贴以下代码段。

以下代码段说明了如何使用XlsIO计算单元格中的公式值

using (ExcelEngine excelEngine = new ExcelEngine())
{
  IApplication application = excelEngine.Excel;

  application.DefaultVersion = ExcelVersion.Excel2013;

  IWorkbook workbook = application.Workbooks.Create(1);

  IWorksheet sheet = workbook.Worksheets[0];

  //Setting values to the cells

  sheet.Range["A1"].Number = 10;

  sheet.Range["B1"].Number = 10;

  //Setting formula in the cell

  sheet.Range["C1"].Formula = "=SUM(A1,B1)";

  // Enabling CalcEngine for computing the formula
  sheet.EnableSheetCalculations();

  string computedValue = sheet.Range["C1"].CalculatedValue;

  workbook.SaveAs("Formula.xlsx");

  // Disabling the CalcEngine
  sheet.DisableSheetCalculations();
}

有关XlsIO的更多信息,请参阅我们的help documentation

注意:我为Syncfusion工作

答案 1 :(得分:0)

根据@Stewart提及他们添加的公式计算修改我的答案。

我再次尝试,它似乎工作。所以,Jesper,在你的情况下,cell.Calculate()应该为你做。我试过这个:

    public void Formula_Calc_Test()
    {
        var datatable = new DataTable("tblData");
        datatable.Columns.AddRange(new[] {new DataColumn("Col1", typeof (int)), new DataColumn("Col2", typeof (int))});

        for (var i = 0; i < 10; i++)
        {
            var row = datatable.NewRow();
            row[0] = i;
            row[1] = i * 10;
            datatable.Rows.Add(row);
        }

        using (var pck = new ExcelPackage())
        {
            var workbook = pck.Workbook;
            var worksheet = workbook.Worksheets.Add("Sheet1");
            var cells = worksheet.Cells;

            cells.LoadFromDataTable(datatable, true);

            var failedRow = 11;
            cells["C1"].Formula = "SUM(B2:B" + (failedRow - 1) + ")";
            cells["C1"].Calculate();
            Console.WriteLine(cells["C1"].Value);

        }
    }

并且在输出中得到了360