我有一个带公式的单元格,我需要调用Calculate()方法,以获得结果。
不知怎的,我可以在我的工作表中的任何单元格上调用Calculate方法,我缺少什么?
我使用的是EPPlus 4.0.5.0版。 我的代码如下:
ws2.Cells[failedRow, failedColumn + 1].Formula = "SUM(B20:B" + (failedRow - 1) + ")";
我需要在同一个细胞上计算。有什么想法吗?
答案 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
。