类 Excel 打印报表
打印报表面向中国式复杂报表与单据(对账单、出入库单、工资条、统计表等):用类 Excel 的单元格网格设计模板,在单元格里填表达式绑定数据集字段,取数后自动分页、分组、汇总,并支持套打、浏览器打印、Excel / PDF / Word 导出。在「报表中心 → 打印报表」(/report/print)管理。
设计流程
- 在列表「新增」打印报表,填写名称、绑定数据集。
- 点「设计」进入 Univer 单元格设计器(与 Excel 操作一致:合并单元格、字体、对齐、边框、行高列宽)。
- 在单元格里填入表达式绑定字段(见下文),从右侧「字段」面板点击可快速插入。
- 配置「页面设置」(纸张/方向/页边距/页眉页脚/套打底图/重复表头/强制分页/分组字段/组头组尾/页小计/总计)。
- 需要多 Sheet 时可新增工作表,分别维护网格与页面配置。
- 「预览」查看取数填充后的效果,「保存」。
- 复杂模板可配置多个数据集绑定、重复块、交叉表和子报表;运行时仍合并为同一安全渲染结果。
单元格表达式语法
| 语法 | 含义 | 用途 |
|---|---|---|
${field} | 明细字段,纵向扩展 | 同一行的多个 ${} 组成「明细带」,按数据行数重复生成多行 |
#{field} | 标量字段,取首行值 | 表头、单据信息区(如制单人、日期) |
${param} | 参数 | 命中已声明参数时按参数解析 |
${SUM(field)} | 聚合 | 还支持 COUNT / AVG / MAX / MIN,标量、不扩展 |
${GROUP_SUM(field)} | 组小计 | 还支持 GROUP_COUNT / GROUP_AVG / GROUP_MAX / GROUP_MIN |
${PAGE_SUM(field)} | 页小计 | 还支持 PAGE_COUNT / PAGE_AVG / PAGE_MAX / PAGE_MIN |
${QRCODE(field)} | 二维码单元格 | HTML / Excel / PDF / Word 均按图形输出 |
${CODE128(field)} | Code128 条码单元格 | 适合单号、箱码、库位码;BARCODE(...) 为同义写法 |
| 普通文本 | 字面量 | 支持「前缀${field}后缀」混合文本 |
除表达式外,单元格还可声明为图片单元格(kind: image,配置图片 URL、宽高与填充方式 fit,套打 logo / 签章图常用)。
示例
| A | B | C | |
|---|---|---|---|
| 1 | 部门用户统计表(合并居中) | ||
| 2 | 部门 | 人数 | 占比 |
| 3 | ${name} | ${value} | ${ratio} |
| 4 | 合计 | ${SUM(value)} |
第 3 行是「明细带」,取数后会按数据行数自动展开为多行;第 4 行的 ${SUM(value)} 自动汇总全部明细。带内的合并单元格会随每行克隆,非带区合并整体下移。横向标签类报表可把明细方向改为横向扩展列。
参数
打印报表可声明参数(同数据集参数),渲染时注入到 ${param} 占位与页眉页脚。预览、列表导出、设计器导出前都会先弹出统一参数表单,按 string / number / boolean / date 自动渲染控件并做必填校验。
页面设置与套打
| 项 | 说明 |
|---|---|
| 纸张 | A4 / A3 / A5 / Letter |
| 方向 | 纵向 / 横向 |
| 页边距 | 上/右/下/左(mm) |
| 页眉 / 页脚 | 文本,支持 ${param} 与 {page} {pages} {date} 占位 |
| 重复表头 | 指定模板行范围,每页自动重复 |
| 分页 | 支持固定 rowsPerPage、按纸张高度自动分页、指定 pageBreaks 强制分页 |
| 分组 | 支持 groupByFields、组头、组尾 / 组小计、页小计、总计 |
| 套打底图 | 背景图 URL,叠加在表格下层,用于在预印单据/票据上精确套打 |
多数据集、交叉表与子报表
content.datasetBindings[]用唯一key绑定数据集,可将模板参数映射到目标参数,并配置rowLimit;parentKey/parentField/childField表达父子数据关系。- Sheet 可用
datasetKey设置默认绑定,单元格也可覆盖;repeatBlocks[]允许同一 Sheet 由不同数据集展开多个不重叠模板带。 detailDirection: 'crosstab'使用rowFields、columnFields、valueFields[{ field, aggregate }]生成交叉表,可显示行/列总计。服务端限制动态列数(256)、总单元格数(10 万)和结果字节数(8MB),超预算直接失败,不截断成错误报表。kind: 'subreport'单元格通过templateId、可选datasetKey和paramBindings嵌入另一个模板。服务端限制递归深度(最多 3 层)并检测循环引用;子报表仍执行目标模板和数据集权限校验。
预览与打印
- 预览:调用渲染接口取数填充,按真实
pages[]逐页还原 HTML(页眉、页脚、底图、页码、重复表头、页小计都会生效)。 - 打印:预览页「打印」按钮调用浏览器打印,
@media print仅打印报表区域,可直接对准预印纸张。
Excel / PDF / Word 导出
打印报表可导出为 Excel(.xlsx)、PDF 与 Word(.docx),接入项目统一导出中心(导出实体 report.print)。明细行数 ≤ 800 时同步直出,超过则按导出中心容量策略转异步任务 + 下载中心取件。
- Excel:服务端用 ExcelJS 还原多 Sheet 网格、合并、字体/对齐/底纹/边框、行高列宽、公式、数字格式、图片/二维码/条码、纸张与页面设置。
- PDF:服务端用 PDFKit 按真实分页结果绘制文本表格、页眉页脚、页码、边框,并对合并单元格做合理降级。
- Word:服务端生成原生
.docx,按渲染后的 Sheet/分页组织表格、页眉页脚、图片、二维码/条码和子报表;不是把 HTML 改扩展名。
与仪表盘的区别
| 仪表盘 / 大屏 | 打印报表 | |
|---|---|---|
| 形态 | 图表 + 指标,屏幕浏览 | 单元格表格,打印/单据 |
| 布局 | 拖拽组件 / 自由画布 | Excel 单元格网格 |
| 典型场景 | 看板、监控、大屏 | 对账单、统计表、票据套打 |
| 导出 | PNG / Excel(数据集) | Excel / PDF / Word / 打印 |
内置示例「部门用户统计表」演示了表头 + 明细纵向扩展 + 合计行(
${SUM}),可直接打开参考。
权限
| 操作 | 权限码 |
|---|---|
| 查看 / 预览 / 渲染 / 导出 | report:print:list |
| 新增 | report:print:create |
| 设计 / 编辑 | report:print:update |
| 删除 | report:print:delete |
列表「权限与转移」可直达资源治理管理该模板的 ACL 与所有权。