function EvaluateFormulaAt(Row, Col: Integer; const Formula: WideString): TXLSFormulaEvaluationResult; overload; function EvaluateFormulaAt(Row, Col: Integer; const Formula: WideString; ReferenceStyle: TXLSFormulaReferenceStyle; const Options: TXLSFormulaEvaluationOptions): TXLSFormulaEvaluationResult; overload;
xlfrsA1 在从目标单元格解析相对引用的同时保留绝对引用和混合引用; xlfrsR1C1 直接从该目标解析相对偏移
CELL 检查提供的目标单元格;用 $A$1 可以从任意目标检查固定的第一个单元格,而 A1 在 A1 上下文契约下相对该目标解析
CELL 元数据和 INFO("recalc") 也可通过只读工作簿视图工作,不改变其世代或存储的公式缓存; CELL("width",reference) 保留其单行两列数组,无法归类的自定义格式返回 xlfeUnsupportedFunction 而不是凭空编造的格式代码;完整的无头与区域设置边界参见 CELL 与 INFO 元数据
FORMULATEXT 通过两个工作表引擎和只读视图检查存储的公式元数据,而不计算被检查的目标; GETPIVOTDATA 对本地数据透视表既有缓存的分离快照求值,并遵守求值预算和取消;缺失的可见聚合仍是类型化的 #REF! 值,不完整或不受支持的数据透视表模型返回 xlfeUnsupportedFunction;存储、数组和缓存边界参见 公式文本检查和 可见的数据透视表数据
TXLSFormulaEvaluationResult 返回 Status、原始的类型化 Value、 IsVolatile,以及一个包含状态、本机代码和消息的稳定 Issue 记录
TXLSFormulaEvaluationStatus = (xlfeOk, xlfeInvalidArgument,
xlfeWorksheetUnavailable, xlfeParseError, xlfeUnsupportedFunction,
xlfeCircularReference, xlfeExternalReferenceDenied, xlfeCancelled,
xlfeResourceLimit, xlfeFailed, xlfeUnsafeFunctionDenied);
TXLSFormulaEvaluationIssue = record
Status: TXLSFormulaEvaluationStatus;
NativeCode: Integer;
Message: WideString;
end;
#DIV/0!、 #REF!之类的公式值、空字符串、数组、布尔值和日期仍然是可区分的值;解析失败、不受支持的函数、循环引用、被拒绝的外部引用、被拒绝的不安全回调、取消、无效参数、不可用的工作表以及资源耗尽都使用显式的 API 状态 Issue.NativeCode 携带底层引擎错误码,而 Issue.Message the human-readable description when Status is not xlfeOkfunction CreateFormulaEvaluationTemplate(Row, Col: Integer; const Formula: WideString; ReferenceStyle: TXLSFormulaReferenceStyle): IXLSFormulaEvaluationTemplate;
EvaluateAt 和 EvaluateAtWithOptions ,以便在不同的目标单元格处重复求值
xlfeWorksheetUnavailable ,并在工作簿的更改使原始编译上下文过时的时候回退到可感知上下文的重新编译
| AllowExternalReferences | 默认为 true,但只允许显式注册的工作区目标或文件本地缓存,绝不执行隐式的文件或网络访问 |
| AllowUnsafeFormulaCallbacks | 默认为 false,在求值任何参数之前阻止危险的函数名进入用户函数注册表或回调;被拒绝时返回 xlfeUnsafeFunctionDenied |
| CancelFlag | 可选的布尔指针,在求值之前和之后检查 |
| MaxFormulaLength | 默认为 8192 个 UTF-16 代码单元 |
| MaxEvaluationSteps | 默认为 1,000,000 次语法项求值 |
| MaxRecursionDepth | 默认为 256 层嵌套公式求值 |
| MaxArrayBytes | 生成的数组负载默认为 64 MiB |
xlfeResourceLimit (随后释放临时求值状态)
AllowUnsafeFormulaCallbacks 视为该次调用的权威设置;默认的一次性求值和模板求值则继承工作簿的同名属性
Template := Sheet.CreateFormulaEvaluationTemplate(2, 2, '=R[-1]C[-1]+1', xlfrsR1C1); Result := Template.EvaluateAt(2, 2); if Result.Status = xlfeOk then UseValue(Result.Value); Options := XLSDefaultFormulaEvaluationOptions; Options.MaxEvaluationSteps := 10000; Result := Template.EvaluateAtWithOptions(20, 4, Options);
Lxcalc::_di_IXLSFormulaEvaluationTemplate evalTemplate =
sheet->CreateFormulaEvaluationTemplate(1, 1,
WideString(L"=ROW()+COLUMN()"), Lxcalc::xlfrsA1);
Lxcalc::TXLSFormulaEvaluationResult result =
evalTemplate->EvaluateAt(7, 8);
直接的 正则表达式后端 API 记录了逐实例匹配、替换、状态值和调用方预算
REGEX 公式共享当前求值上下文的工作量、内存和取消控制,包括 PCRE2 工作区和输出分配;取消或资源限制产生显式状态,不会给出部分提取或替换结果
GROUPBY 与 PIVOTBY 在当前上下文中汇总分离的数组或工作表区域快照,包括捕获的 Lambda 环境、分组索引、回调向量和输出存储;资源限制和取消返回显式状态,不改变工作表数据、缓存或布局