报表脚本示例
报表表达式实用示例:日期处理、数字格式化、空值处理、集合操作、条件显示、单元格引用等
日期范围查询
// 获取本月第一天和最后一天(字符串)
var start = monthStart(now(), "yyyy-MM-dd");
var end = monthEnd(now(), "yyyy-MM-dd");
start + " ~ " + end
// => "2024-03-01 ~ 2024-03-31"
数字格式化
// 货币格式
formatNumber(1234567.89, "#,##0.00") + " 元"
// => "1,234,567.89 元"
// 百分比
percent(0.8756, 2)
// => "87.56%"
// 保留两位小数
round(3.14159265, 2)
// => 3.14
空值处理
// 为空时显示占位符
ifEmpty(value, "—")
// 链式判空
user?.department?.name ?: "未分配"
// 多字段拼接(跳过空值)
joinIfNotEmpty(" / ", dept, team, group)
集合操作
// 数据集字段求和
var data = dataset("orders", "amount");
sum(...data)
// 过滤并格式化
var names = dataset("employees")
.filter(r => r.status == "在职")
.map(r => r.name)
.join("、");
names
条件显示
// 三元运算符
score >= 60 ? "✓ 合格" : "✗ 不合格"
// 复杂条件
if (value == null || value == 0) {
return "—";
}
return formatNumber(value, "#,##0") + " 件";
序号生成
// 全局序号(简单行号)
seq()
// 带前缀的序号(补零到 4 位)
"NO." + concat("0000", seq()).right(4)
// => "NO.0001", "NO.0002", ...
使用报表参数
// 参数以 $参数名 形式访问
formatDate($startDate::date('yyyy-MM-dd'), "yyyy年MM月dd日") +
" 至 " +
formatDate($endDate::date('yyyy-MM-dd'), "yyyy年MM月dd日")
// 空值保护
$dept == null ? "全部部门" : $dept
单元格值加工($$value)
// $$value:当前单元格原始值的二次处理
$$value == null ? "—" : formatNumber($$value, "#,##0.00") + " 元"
// $$record:利用当前行其他字段
$$record.type == "退款" ? "-" + $$value : $$value
单元格引用与聚合
Magic Report 支持在表达式中直接引用其他单元格名称(如 A1、B2),引擎会自动根据父子扩展关系定位正确的数据行。
// B2 是数据扩展列,在其父格 A2 中汇总
sum(B2) // B2 所有扩展行之和
avg(B2) // 平均值
// 引用区域
sum(B2:B10)
// 通过 & 获取扩展序号(行号)
&A1 // => 1, 2, 3 ...
// 全局/分组自增序号
seq() // => 1, 2, 3 ...
seq("group") // 分组内序号
读取自定义配置
// 访问管理员在「脚本配置」中定义的键值对
$$config.companyName + " - 销售报表"
// 带默认值保护
ifEmpty($$config.reportTitle, "业务汇总")
日期差值计算
// 计算工龄(年)
var years = betweenYears(toDate($hireDate, "yyyy-MM-dd"), now());
years + " 年"
// 计算账期(天)
var days = betweenDays(toDate($startDate, "yyyy-MM-dd"), now());
days + " 天"
人民币大写
numberToRMB(123456.78)
// => "壹拾贰万叁仟肆佰伍拾陆圆柒角捌分"
当前页/总页数
page() + " / " + pageCount()