16 · XTL 函数 vs Excel 公式
常见坑点 — 从这里开始
你打开这页通常是因为某些东西没按预期工作。最有可能的几种情况:
"我想在单元格里显示 ¥1,234,567,TEXT([金额], "¥#,##0") 不起作用"
XTL 的 TEXT() 故意只提供了一小套格式 token,货币 token 不在其中。正确做法是用单元格的数字格式(numFmt):
| 步骤 | 位置 |
|---|---|
1. 在模板单元格里把单元格格式设为 "¥"#,##0 | Excel 的"设置单元格格式"对话框 → 自定义 |
2. 在该单元格里写 {{ [金额] }}(裸数字) | XTL 替换 |
渲染出的单元格里存的是数字,Excel 把它显示为 ¥1,234,567。因为值仍然是数字,排序、过滤和下游公式都能照常工作。
同样的模式可以处理 (1,234) 形式的会计负数(#,##0;(#,##0))、百分比(0.00%)和日期(yyyy-mm-dd)。
"我想让 =B2*2 按行计算,但每行都显示同一个结果"
xl3 在 @repeat 行展开时逐字保留你的公式文本——它不会把 B2 重写成 B3、B4 等(契约见 ADR-0046)。
改用 XTL 表达式:
{{ [金额] * 2 }}
这会在每行渲染时求值,并把计算出的数字写入对应单元格。结果一样,但没有行引用混乱的问题。
"我想在底部加合计,=SUM(B2:B5) 在行展开时范围不会跟着扩"
根源相同——xl3 不会重写范围引用。两种选项:
- 整列引用 写在页脚:
=SUM(B:B)(或在上游用@filter只留下数据行)。 - XTL 聚合:在页脚单元格里写
{{ SUM([金额]) }}。渲染时计算并写入数字。
"我想给每行加可点击的链接"
使用 XTL 的 HYPERLINK() 函数(URL/label 都可以引用列):
{{ HYPERLINK([链接], [显示名]) }}
如果是静态 URL,单元格里写普通的 =HYPERLINK("https://...", "label") 公式也可以(xl3 会保留)。
"我写了 5 个分支的 IF(...),嵌套读不下去"
IFS(c1, v1, c2, v2, ...) 是 XTL 的多分支条件函数。最后以 TRUE, default 收尾作为兜底:
{{ IFS([R] > 10000, "VIP", [R] > 1000, "普通", TRUE, "轻量") }}