在单元格中输入以等号("=")开头的内容即可设置公式。

在 aardio 中设置单元格公式可以使用以下方法:
// 方法1:直接访问单元格数据
sheet1["E3"] = "=(A3+B3)*C3";
// 方法2:通过单元格实例
var cell = sheet1.Cells["E3"];
cell.Formula = "(A3+B3)*C3"; // 不需要等号(=)
获取单元格中的公式:
// 方法1:通过工作表方法
var formula = sheet1.GetCellFormula("C1");
// 方法2:通过单元格实例
var cell = sheet1.Cells["C1"];
var formula = cell.Formula;
检查单元格是否包含公式且其值由公式计算得出:
var hasFormula = cell.HasFormula;
完成单元格编辑后,公式会被立即解析并计算单元格值。

使用以下方法获取公式计算结果:
// 方法1:直接访问单元格数据
var value = sheet1["E3"];
// 方法2:通过单元格实例
var cell = sheet1.Cells["E3"];
var value = cell.Data;
ReoGrid 始终使用 .NET 原生类型作为公式值类型:
例如:
sheet1["E3"] = "=(A3+B3)*C3";
var value = sheet1["E3"]; // 类型为 double
整数、长整型等数值类型会被转换为 double 类型,字符串和 StringBuilder 会被转换为 string 类型。
在文本前加单引号(')可防止被解析为公式:
sheet1["A1"] = "'=10"; // 单元格数据为 '=10'
支持两种引用方式:

示例公式使用相对引用其他单元格:

结果:

使用 StartCell:EndCell 格式引用范围:

结果:

获取单元格公式的引用关系列表:
sheet1["H8"] = "=A1+B1-SUM(A1:C3)+AVERAGE(D1:H5)";
var rangeList = sheet1.GetCellFormulaReferenceRanges("H8");
使用 ClearRangeContent 方法删除指定范围的公式:
var sheet1 = grid.CurrentWorksheet;
sheet1.ClearRangeContent("A1:B5", 0x10/*CellElementFlags.Formula*/);
追踪单元格公式的引用和被引用关系。

启用追踪:
var sheet1 = workbook.CurrentWorksheet;
sheet1["C2"] = 10;
sheet1["C3"] = 5;
var cell = sheet1.Cells["C5"];
cell.Formula = "C2+C3";
cell.TraceFormulaPrecedents = true;
或通过工作表方法启用:
sheet1.TraceCellPrecedents("C5");
公式变更后追踪箭头会消失,如需持续追踪:
sheet1.CellDataChanged = function(sender,event){
event.Cell.TraceFormulaPrecedents = true;
}
在公式中直接使用命名范围名称:
sheet1.DefineNamedRange("myrange", "A1:B5");
sheet1.Cells["E10"] = "=SUM(myrange)";
ReoGrid 支持内置的 Excel 兼容函数,详见公式函数。
默认情况下,当单元格值变更时,所有引用该单元格的公式会自动重新计算。
禁用自动更新:
sheet1.SuspendFormulaReferenceUpdates();
恢复自动更新:
sheet1.ResumeFormulaReferenceUpdates();
或通过工作表设置:
// 禁用自动更新
sheet1.SetSettings(0x40000000/*WorksheetSettings.Formula_AutoUpdateReferenceCell*/, false);
// 启用自动更新
sheet1.SetSettings(0x40000000/*WorksheetSettings.Formula_AutoUpdateReferenceCell*/, true);
当禁用自动更新后,可手动触发全表重新计算:
sheet1.Recalculate();
添加自定义函数详见自定义函数。