aardio 文档

dotNet.ReoGrid 扩展库 - 公式

设置公式

通过编辑单元格设置公式

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

28

通过编程设置公式

在 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;

获取公式计算结果

完成单元格编辑后,公式会被立即解析并计算单元格值。

29

通过编程获取公式结果

使用以下方法获取公式计算结果:

// 方法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'

单元格引用

支持两种引用方式:

13_2

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

结果: 95

范围引用

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

结果: 92

获取公式引用列表

获取单元格公式的引用关系列表:

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*/);

追踪引用和被引用关系

追踪单元格公式的引用和被引用关系。

83

启用追踪:

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)";

内置Excel兼容函数

ReoGrid 支持内置的 Excel 兼容函数,详见公式函数

自动更新引用单元格

默认情况下,当单元格值变更时,所有引用该单元格的公式会自动重新计算。

暂停和恢复自动更新

禁用自动更新:

sheet1.SuspendFormulaReferenceUpdates();

恢复自动更新:

sheet1.ResumeFormulaReferenceUpdates();

或通过工作表设置:

// 禁用自动更新
sheet1.SetSettings(0x40000000/*WorksheetSettings.Formula_AutoUpdateReferenceCell*/, false);

// 启用自动更新
sheet1.SetSettings(0x40000000/*WorksheetSettings.Formula_AutoUpdateReferenceCell*/, true);

强制重新计算整个工作表

当禁用自动更新后,可手动触发全表重新计算:

sheet1.Recalculate();

自定义函数

添加自定义函数详见自定义函数

Markdown 格式