文档首页 / 报表脚本示例

报表脚本示例

报表表达式实用示例:日期处理、数字格式化、空值处理、集合操作、条件显示、单元格引用等

日期范围查询

// 获取本月第一天和最后一天(字符串)
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 支持在表达式中直接引用其他单元格名称(如 A1B2),引擎会自动根据父子扩展关系定位正确的数据行。

// 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()
联系我们

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