报表函数参考
最后更新: 2026/6/1
Magic Report 内置全局函数速查:数学、字符串、日期、工具及报表专属函数
所有内置函数均可在表达式中直接调用,无需任何前缀。
5.1 数学函数
| 函数 | 说明 | 示例 |
round(n, digits?) | 四舍五入,默认 0 位 | round(3.456, 2) → 3.46 |
ceil(n) | 向上取整 | ceil(3.1) → 4 |
floor(n) | 向下取整 | floor(3.9) → 3 |
abs(n) | 绝对值 | abs(-5) → 5 |
pow(n, e) | 指数运算 | pow(2, 10) → 1024 |
log(n, base) | 对数 | log(100, 10) → 2 |
percent(n, digits?) | 转百分比字符串 | percent(0.856, 1) → "85.6%" |
formatNumber(value, fmt) | 格式化数字 | formatNumber(1234567.89, "#,##0.00") → "1,234,567.89" |
sum(v1, v2, ...) | 多参数求和 | sum(10, 20, 30) → 60 |
avg(v1, v2, ...) | 多参数平均值 | avg(10, 20, 30) → 20 |
max(v1, v2, ...) | 多参数最大值 | max(3, 1, 4, 1, 5) → 5 |
min(v1, v2, ...) | 多参数最小值 | min(3, 1, 4, 1, 5) → 1 |
count(v1, v2, ...) | 参数个数(含 null) | count(1, null, 3) → 3 |
5.2 字符串函数
| 函数 | 说明 | 示例 |
concat(s1, s2, ...) | 拼接(忽略 null) | concat("Hello", " World") → "Hello World" |
upper(str) | 转大写 | upper("hello") → "HELLO" |
lower(str) | 转小写 | lower("HELLO") → "hello" |
trim(str) | 去两端空格 | trim(" hi ") → "hi" |
length(str) | 字符串长度 | length("hello") → 5 |
substring(str, start, end?) | 截取子串 | substring("hello", 1, 3) → "el" |
left(str, n) | 左起截取 n 位 | left("hello", 3) → "hel" |
right(str, n) | 右起截取 n 位 | right("hello", 3) → "llo" |
replace(str, old, new) | 替换(支持正则) | replace("a1b2", "\\d", "X") → "aXbX" |
indexOf(str, find) | 查找位置(-1=未找到) | indexOf("hello", "ll") → 2 |
contains(str, sub) | 是否包含子串 | contains("hello", "ell") → true |
startsWith(str, prefix) | 是否以前缀开头 | startsWith("hello", "he") → true |
endsWith(str, suffix) | 是否以后缀结尾 | endsWith("hello", "lo") → true |
isBlank(str) | 是否为空白字符串 | isBlank(" ") → true |
isNotBlank(str) | 是否不为空白 | isNotBlank("hi") → true |
numberToRMB(n) | 数字转人民币大写 | numberToRMB(1234.56) → "壹仟贰佰叁拾肆圆伍角陆分" |
5.3 日期函数
获取日期
| 函数 | 说明 | 示例 |
now() | 当前日期时间(Date 对象) | now() |
date() | 当前日期 yyyy-MM-dd | date() → "2024-03-15" |
time() | 当前时间 HH:mm:ss | time() → "14:30:00" |
toDate(str, fmt) | 字符串解析为 Date | toDate("2024-03-15", "yyyy-MM-dd") |
格式化日期
| 函数 | 说明 | 示例 |
formatDate(val) | 格式化为 yyyy-MM-dd | formatDate(now()) |
formatDate(val, pattern) | 自定义格式 | formatDate(now(), "yyyy年MM月dd日") |
formatDateTime(val) | 格式化为 yyyy-MM-dd HH:mm:ss | formatDateTime(now()) |
提取日期分量
| 函数 | 说明 |
year(date?) | 年份 |
month(date?) | 月份(1~12) |
day(date?) | 日(1~31) |
hour(date?) | 小时(0~23) |
minute(date?) | 分钟(0~59) |
second(date?) | 秒(0~59) |
日期运算
| 函数 | 说明 | 示例 |
addDays(date, n) | 增减天数 | addDays(now(), 7) → 一周后 |
addMonths(date, n) | 增减月数 | addMonths(now(), -3) → 三个月前 |
addYears(date, n) | 增减年数 | addYears(now(), 1) → 一年后 |
monthStart(date?) | 月初(00:00:00) | monthStart() |
monthEnd(date?) | 月末(23:59:59.999) | monthEnd() |
yearStart(date?) | 年初(1月1日 00:00:00) | yearStart() |
yearEnd(date?) | 年末(12月31日 23:59:59) | yearEnd() |
betweenDays(d1, d2) | 相差完整天数 | betweenDays(d1, d2) → 1920L |
betweenMonths(d1, d2) | 相差完整月数 | betweenMonths(d1, d2) |
betweenYears(d1, d2) | 相差完整年数 | betweenYears(d1, d2) |
5.4 工具函数
| 函数 | 说明 | 示例 |
isNull(v) | 是否为 null | isNull(null) → true |
isNotNull(v) | 是否不为 null | isNotNull("") → true |
isEmpty(v) | 是否为空(null/空字符串/空集合) | isEmpty([]) → true |
isNotEmpty(v) | 是否不为空 | isNotEmpty("a") → true |
ifNull(v, default) | 为 null 时返回默认值 | ifNull(null, "N/A") → "N/A" |
ifEmpty(v, default) | 为空时返回默认值 | ifEmpty("", "默认") → "默认" |
joinIfNotEmpty(sep, v1, v2, ...) | 非空值用分隔符拼接 | joinIfNotEmpty("-", "a", null, "b") → "a-b" |
uuid() | 生成 UUID 字符串 | uuid() |
range(from, to) | 生成整数区间迭代器(含两端) | range(1, 5) → [1,2,3,4,5] |
userAccount() | 当前登录用户账号 | userAccount() → "admin" |
username() | 当前登录用户姓名 | username() → "管理员" |
println(v) | 向控制台打印(调试用) | println("debug: " + value) |
5.5 报表专属函数
以下函数仅在报表表达式上下文中可用(依赖报表运行时):
位置信息
| 函数 | 说明 |
row() | 当前单元格的行号(从 1 开始) |
rows() | 报表计算后的总行数 |
column() | 当前单元格的列号(从 1 开始) |
columns() | 报表计算后的总列数 |
分页信息
| 函数 | 说明 |
page() | 当前页码(从 1 开始) |
pageCount() | 分页后总页数 |
序列与计数
| 函数 | 说明 | 示例 |
seq() | 全局唯一自增序号 | seq() → 1, 2, 3... |
seq(key) | 同一 key 共享的自增序号 | seq("group1") |
数据集访问
| 函数 | 说明 | 示例 |
dataset(name) | 获取指定数据集(返回列表) | dataset("ds1") |
dataset(name, field) | 获取数据集中某字段的所有值 | dataset("ds1", "amount") |
// 示例:对数据集中某字段求和
var amounts = dataset("sales", "amount");
sum(...amounts)
// 示例:获取完整数据集并过滤
var rows = dataset("employees");
rows.filter(r => r.dept == "技术部").map(r => r.name).join("、")