文档首页 / 用户、工具与数组函数

用户、工具与数组函数

用户信息函数 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 方法与 {} 占位符。输出只出现在服务端日志里,不显示在报表上。

各函数所属的完整目录见 内置函数总览。

联系我们

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