文档首页 / 报表函数参考

报表函数参考

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-dddate()"2024-03-15"
time()当前时间 HH:mm:sstime()"14:30:00"
toDate(str, fmt)字符串解析为 DatetoDate("2024-03-15", "yyyy-MM-dd")

格式化日期

函数说明示例
formatDate(val)格式化为 yyyy-MM-ddformatDate(now())
formatDate(val, pattern)自定义格式formatDate(now(), "yyyy年MM月dd日")
formatDateTime(val)格式化为 yyyy-MM-dd HH:mm:ssformatDateTime(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)是否为 nullisNull(null)true
isNotNull(v)是否不为 nullisNotNull("")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("、")
联系我们

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