文档首页 / 表达式与函数

表达式与函数

报表表达式语法和内置函数参考

概述

Magic Report 的表达式引擎基于 Magic Script,支持在单元格中直接编写计算逻辑。语法类似 JavaScript,比 Excel 公式更强大,支持变量、循环、Lambda,并可访问报表数据行和参数。

⚠️ 注意:所有内置函数均为小写,如 sum(B2)if(x, a, b)now(),而非 Excel 中的大写形式。

两种表达式形式

形式说明示例
单行表达式直接写表达式,其值即为单元格显示内容sum(B2)if(A2 > 0, "正", "负")
多行脚本使用 varifreturn 等关键字编写复杂逻辑var v = A2 * 1.1; return round(v, 2);

内置变量

变量说明示例
$$value当前单元格的原始值,用于格式化表达式或条件渲染中$$value > 0 ? "盈利" : "亏损"
$$record当前数据行(Map),可访问任意字段$$record.dept_name
$参数名报表参数($ 前缀)$startDate$dept
$$config.key管理员在「脚本配置」中定义的自定义键值对$$config.companyName

单元格引用

写法说明
A1引用单元格 A1 的当前值
sum(B2)B2 所有扩展行的总和
avg(B2)count(B2)max(B2)平均值、计数、最大值
sum(B2:B10)区域引用求和
&A2A2 当前扩展迭代的序号(1, 2, 3…)

父子关系约束:父格表达式中不能引用子格(含 sum(子格)),否则报错。总计行应在报表底部单独一行,并设 enabledParentCellFilter=false

函数速查

数学与统计

函数说明示例
sum(v1, v2, ...)求和sum(10, 20, 30)60
avg(v1, v2, ...)平均值avg(B2)
max(v1, v2, ...)最大值max(B2)
min(v1, v2, ...)最小值min(B2)
count(v1, v2, ...)计数count(B2)
round(n, digits)四舍五入round(3.456, 2)3.46
abs(n)绝对值abs(-100)100
percent(n, digits)转百分比字符串percent(0.856, 1)"85.6%"
formatNumber(n, pattern)数字格式化formatNumber(1234567.89, "#,##0.00")

字符串

函数说明示例
concat(s1, s2, ...)拼接(忽略 null)concat("部门:", dept)
left(str, n) / right(str, n)左/右截取left("hello", 3)"hel"
length(str)字符串长度length("hello")5
upper(str) / lower(str)大/小写转换upper("hello")"HELLO"
trim(str)去首尾空格
replace(str, old, new)替换(支持正则)
numberToRMB(n)数字转人民币大写numberToRMB(1234.56)

日期

函数说明示例
now()当前日期时间
formatDate(d, pattern)格式化日期formatDate(now(), "yyyy年MM月dd日")
year(d) / month(d) / day(d)提取年/月/日year(now())2026
addDays(d, n) / addMonths(d, n)日期加减addDays(now(), -7) → 一周前
monthStart() / monthEnd()本月第一天/最后一天
betweenDays(d1, d2)相差天数

逻辑与空值处理

函数说明示例
if(cond, trueVal, falseVal)条件判断(函数式,推荐)if(A1 > 60, "及格", "不及格")
isNull(v) / isNotNull(v)null 判断
isEmpty(v) / isNotEmpty(v)空值/空集合判断
ifNull(v, default)为 null 时返回默认值ifNull(remark, "—")
ifEmpty(v, default)为空时返回默认值ifEmpty(dept, "未分配")
joinIfNotEmpty(sep, v1, v2, ...)非空值用分隔符拼接joinIfNotEmpty(" / ", dept, team)

报表专属

函数说明
seq()全局唯一自增序号(1, 2, 3…)
seq("key")分组内自增序号,同一 key 共享计数
row() / rows()当前行号 / 报表总行数
page() / pageCount()当前页码 / 总页数
dataset(name, field)获取指定数据集中某字段的所有值(返回列表)

相关文档

联系我们

请填写您的信息,我们将在 1 个工作日内与您联系。