用户、工具与数组函数
用户信息函数 userAccount、username,工具函数 uuid、print、println、printf、arrayGet、range,数组创建函数 newArray 系列,以及数值、类型转换等扩展方法。
概述
本篇收录不属于数学、文本、日期、逻辑、聚合和报表类别的 17 个函数,并列出可以在值上直接用点号调用的扩展方法,以及脚本里的 log 模块。
函数详解
userAccount
语法
userAccount()
无参数。
返回值:String,当前登录用户的账号。
示例
userAccount()
结果:当前用户账号为 zhangsan 时得 "zhangsan"
说明
- 取的是发起本次报表预览或导出的用户;常用于页眉显示「制表人」,或作为数据集参数的默认值表达式。
username
语法
username()
无参数。
返回值:String,当前登录用户的姓名。
示例
'制表人:' + username()
结果:制表人:张三
uuid
语法
uuid()
无参数。
返回值:String,随机生成的 UUID,不含连字符,共 32 位。
示例
uuid()
结果:形如 "3f2a9c...e1"(每次不同)
说明
- 同名函数在平台里还有一份带连字符的实现,实际调用时使用不含连字符的版本。
print
语法
print(value)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
value |
Object | 是 | 要输出的对象 |
返回值:无返回值。
示例
print('a')
结果:服务端标准输出打印 a,不换行
说明
- 输出到服务端控制台,不会显示在报表里,仅用于调试;正式环境建议用
log模块(见后文)。
println
语法
println(value)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
value |
Object | 是 | 要输出的对象 |
返回值:无返回值。
示例
println('a')
结果:服务端标准输出打印 a 并换行
说明
- 输出位置同
print。同名的println在平台里有两份实现(脚本内置版与平台版),调用时先注册的脚本内置版生效,按对象的toString()输出,BigDecimal 可能显示为科学计数法。
printf
语法
printf(format, args...)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
format |
String | 是 | Java 格式串,如 %s、%.2f |
args |
Object... | 否 | 格式串的参数 |
返回值:无返回值。
示例
printf('%s=%d', 'n', 3)
结果:服务端输出 n=3
说明
- 输出位置同
print。
arrayGet
语法
arrayGet(array, index)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
array |
数组/List/单个值 | 是 | 要取值的对象 |
index |
int | 是 | 下标,从 0 开始;必须是整数类型,不是小数或长整型 |
返回值:Object,指定位置的元素;array 为 null、下标为负或越界时返回 null。
示例
arrayGet(['a', 'b'], 1)
结果:"b"
arrayGet(['a'], 5)
结果:null
arrayGet('x', 0)
结果:"x"(单个值按只有一个元素处理)
说明
- 与直接写
list[5]相比,越界时不报错而返回null。
range
语法
range(from, to)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
from |
int | 是 | 起始编号 |
to |
int | 是 | 结束编号,包含 |
返回值:Iterator,依次产生 from 到 to 的整数;from 大于 to 时不产生任何值。
示例
for (i in range(1, 3)) { println(i) }
结果:依次输出 1、2、3
说明
- 结果是一次性迭代器,只能遍历一次,用于
for ... in循环;不是 List,没有size()、map等方法。
newArray
语法
newArray(size)
newArray(componentType, size)
newArray(value1, value2, ...)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
size |
int | 是(第一种形态) | 数组长度,创建元素为 null 的 Object 数组 |
componentType |
Class | 是(第二种形态) | 元素类型,需要先用 import 引入 |
value1, value2, ... |
String 或 数值 | 是(第三种形态) | 直接列出元素;全部为字符串得到 String 数组,全部为整数得到 int 数组,此外还支持 short、long、float、double、byte、char、boolean 数组 |
返回值:数组,类型由所用形态决定。
示例
newArray(3)
结果:长度为 3 的 Object 数组,元素均为 null
newArray('a', 'b')
结果:String 数组 ["a", "b"]
newArray(1, 2, 3)
结果:int 数组 [1, 2, 3]
说明
- 只有一个整数参数时,视为长度而不是元素:
newArray(5)是长度为 5 的数组,不是只含一个 5 的数组。需要单元素的 int 数组请写[5]的列表或用newIntArray。
newIntArray
语法
newIntArray(size)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
size |
int | 是 | 数组长度 |
返回值:int 数组,元素均为默认值 0。
示例
newIntArray(3)
结果:长度为 3 的 int 数组
newShortArray
语法
newShortArray(size)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
size |
int | 是 | 数组长度 |
返回值:short 数组,元素均为默认值 0。
示例
newShortArray(3)
结果:长度为 3 的 short 数组
newDoubleArray
语法
newDoubleArray(size)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
size |
int | 是 | 数组长度 |
返回值:double 数组,元素均为默认值 0.0。
示例
newDoubleArray(3)
结果:长度为 3 的 double 数组
newFloatArray
语法
newFloatArray(size)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
size |
int | 是 | 数组长度 |
返回值:float 数组,元素均为默认值 0.0。
示例
newFloatArray(3)
结果:长度为 3 的 float 数组
newByteArray
语法
newByteArray(size)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
size |
int | 是 | 数组长度 |
返回值:byte 数组,元素均为默认值 0。
示例
newByteArray(3)
结果:长度为 3 的 byte 数组
newCharArray
语法
newCharArray(size)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
size |
int | 是 | 数组长度 |
返回值:char 数组,元素均为默认值 \u0000。
示例
newCharArray(3)
结果:长度为 3 的 char 数组
newBooleanArray
语法
newBooleanArray(size)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
size |
int | 是 | 数组长度 |
返回值:boolean 数组,元素均为默认值 false。
示例
newBooleanArray(3)
结果:长度为 3 的 boolean 数组
newLongArray
语法
newLongArray(size)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
size |
int | 是 | 数组长度 |
返回值:long 数组,元素均为默认值 0。
示例
newLongArray(3)
结果:长度为 3 的 long 数组
扩展方法
除上面的全局函数外,值上还可以直接用点号调用下列扩展方法。它们不是全局函数,不能写成 round(x, 2) 的形式(round 的全局函数见 数学函数,参数不同)。
| 对象 | 方法 | 说明 | 示例 | 结果 |
|---|---|---|---|---|
| 数值 | round(n) |
四舍五入保留 n 位小数,返回 Double | x.round(2) |
x 为 3.14159 时 3.14 |
| 数值 | floor() ceil() |
向下、向上取整;小数(Double)返回 Double,如 3.0;整数原样返回;BigDecimal 的 ceil() 是远离 0 方向取整 |
total.floor() |
对变量 total 取整 |
| 数值 | asPercent(n) |
转为百分比文本,保留 n 位小数 | x.asPercent(1) |
x 为 0.256 时 "25.6%" |
| 数值 | toFixed(n) |
四舍五入保留 n 位小数,返回文本,仿 JS 的 toFixed | x.toFixed(2) |
x 为 2.5 时 "2.50" |
| 日期 | format(pattern) |
按格式串把日期转为文本 | now().format('yyyy-MM-dd') |
当天日期文本 |
| 任意值 | asInt() asInt(默认值) |
转 int;失败时返回默认值,无默认值时为 0 |
'12'.asInt() |
12 |
| 任意值 | asDouble() asLong() asShort() asByte() asFloat() |
同上,转对应类型;失败为 0 | '1.5'.asDouble() |
1.5 |
| 任意值 | asDecimal() asDecimal(默认值) |
转 BigDecimal | '1.50'.asDecimal() |
1.50 |
| 任意值 | asString() asString(默认值) |
转文本 | n.asString() |
"12"(n 为 12) |
| 任意值 | asDate() asDate(格式...) |
转日期,无格式时按 yyyy-MM-dd HH:mm:ss;支持 10 位、13 位时间戳 |
'2026-01-05 08:00:00'.asDate() |
日期值 |
| 任意值 | isArray() isCollection() isMap() |
判断对象类型 | list.isCollection() |
变量 list 是集合时为 true |
| Map | asBean(类) asList(映射函数) each(函数) merge(键, 值) merge(其他Map...) asString(分隔符, 连接符) sort() replaceKey(查找, 替换) replaceAllKey(查找, 替换) |
Map 的转换、遍历、合并与排序,回调写成 (key, value, source) => ... |
高级脚本使用 | 见 脚本使用指南 |
| 文本 | match(Pattern) replace(Pattern, 替换) |
用 Pattern 对象做正则校验与替换;一般直接用全局函数 replace |
高级脚本使用 |
带 :: 的类型转换(x::int、x::date('yyyy-MM-dd'))是另一套写法,见 报表基本语法。
log 模块
在多行脚本里可以用 import log 引入日志对象,把信息写到服务端日志,日志名称取脚本名称:
import log
log.info('科室 {} 共 {} 行', dept, rows)
return dept
log 是 SLF4J 的 Logger,支持 info、warn、error、debug 方法与 {} 占位符。输出只出现在服务端日志里,不显示在报表上。
各函数所属的完整目录见 内置函数总览。