FineReport11.0 — 帆软报表能力实现
Overview
本 Skill 让 WorkBuddy 在不安装 FineReport 的情况下,产出与帆软 FineReport 11.0 等价的企业级报表成果:Web 报表/大屏(HTML + ECharts) 与 Excel 中国式报表(openpyxl) 两种形态,覆盖四大能力模块:中国式复杂报表、决策报表与大屏、参数查询与填报、导出打印与调度。同时提供 FineReport 11.0 能力地图(references/finerport-capabilities.md),用于需求识别与方案映射。
需求识别与形态选择
接到报表需求后,先识别报表类型并选择输出形态(可组合):
| 需求特征 | 输出形态 | 参考资源 |
|---|---|---|
| 决策报表 / 数据大屏 / 驾驶舱 / 图表分析 / 联动钻取 | Web 报表(HTML+ECharts) | references/web-report-guide.md、assets/web-report-template.html |
| 中国式复杂报表 / 填报 / 数据下发(分组、交叉、主子、汇总、导出 Excel) | Excel 报表(openpyxl .xlsx) | references/excel-report-guide.md、scripts/build_grouped_excel_report.py |
| 既要可视化又要数据文件(常见于经营分析) | 混合:Web 展示 + 提供 Excel 下载链接/文件 | 两个指南均需阅读 |
| 需求方只要方案/设计文档 | 方案文档:用能力地图输出报表设计方案、模板结构、实现指导 | references/finerport-capabilities.md |
核心工作流
Step 1 澄清需求(必做,不要假设)
确认以下要素,缺失时向用户提问:
- 报表类型:普通报表(分组/交叉/主子/聚合)还是决策报表(大屏/驾驶舱)?
- 数据来源:用户提供 CSV/Excel/JSON,还是需要内置示例数据,或从数据库取数?
- 维度与指标:行分组字段、列分组字段、汇总指标及计算方式(求和/均值/占比/环比/同比)。
- 参数:需要哪些过滤控件(日期范围、下拉选择、文本框),是否有联动关系。
- 输出形态与用途:浏览器预览、导出 Excel、打印、还是用于汇报。
Step 2 准备数据
- 将数据整理为结构化数据集(列表 of dict 或 DataFrame),字段名清晰、类型正确。
- 涉及数值计算(合计、占比、环比、同比、增长率等)时,必须用代码计算(Python 或 JS),禁止在思维中口算。
- 数据量较大时,先做聚合再渲染,避免页面卡顿或 Excel 文件过大。
Step 3 构建报表
- Web 形态:读取
references/web-report-guide.md的布局与交互模式;以assets/web-report-template.html为骨架复制到工作区,替换示例数据、图表与控件。 - Excel 形态:读取
references/excel-report-guide.md的模式;可运行scripts/build_grouped_excel_report.py作为起点改造。 - 混合形态:Web 页面内提供「导出 Excel」按钮(前端生成或后端 openpyxl 生成文件后由用户下载)。
Step 4 质量检查(交付前必检)
- [ ] 报表类型与用户需求一致(分组/交叉/主子是否按需实现)
- [ ] 合计、小计、占比、环比等数值已由代码计算并核验
- [ ] 主题适配:Web 报表背景与文字颜色匹配当前 IDE 主题(浅色/深色)
- [ ] 金融/股票类指标遵循中国惯例:涨红跌绿、货币 ¥
- [ ] Excel:表头合并正确、边框完整、数字格式(千分位/百分比/¥)、冻结窗格与打印设置合理
- [ ] 参数控件可用,过滤结果正确,联动/钻取无死链
四大能力模块实现要点
模块 A:中国式复杂报表
- 分组报表:行分组 + 组内明细 + 小计行 + 总计行;Web 用
<table>渲染分组行(跨行合并),Excel 用合并单元格。 - 交叉报表:行维度 × 列维度双向扩展,交叉点为汇总值;先代码透视(
pivot)再渲染。 - 主子报表:主子表通过主键关联;Web 用 Tab 或联动明细区,Excel 用多个 sheet。
- 聚合报表/不规则报表:斜线表头、多表头、自由布局单元格(Web 用 CSS grid 模拟,Excel 用合并单元格 + 对角线边框)。
- 行列扩展、单元格合并与对齐是 FineReport 普通报表的核心,实现时优先保证结构还原度。
模块 B:决策报表与大屏
- 组件化布局:指标卡(KPI)、图表区、表格区、Tab 页签,参考驾驶舱三段式(顶部标题栏 + 中部主体 + 底部页脚)或栅格布局。
- 图表选择:趋势→折线/面积,占比→饼/环形/南丁格尔,对比→柱状/条形,排名→条形,分布→散点/热力,地图→ECharts 中国地图。
- 交互:参数过滤重渲染、图表点击联动(事件驱动)、钻取下钻(点击柱状图→月度明细)。
- 大屏氛围:深色渐变背景 + 发光描边 + 数字滚动动画 + 自动轮播(仅当用户明确要大屏风格;普通报表保持简洁)。
模块 C:参数查询与填报
- 参数面板:日期范围、下拉选择(数据字典)、文本框、多选;触发方式「查询」按钮或即时过滤。
- 联动:A 控件变化 → 重载 B 控件选项 → 刷新报表(Web 用 JS 事件链,Excel 用数据验证下拉 + INDIRECT 或预生成多 sheet)。
- 填报:Web 用表单 + 输入校验(必填/格式/范围)模拟数据录入;Excel 用
DataValidation(整数/小数/序列/自定义公式)做录入校验,并可用openpyxl生成「填报模板」由业务填写。 - 参数 URL 传递(Web 用 query 参数)与默认值设定。
模块 D:导出打印与调度
- Web 导出:
window.print()打印(配置@media print),EChartsgetDataURL()导出 PNG,表格导出 CSV;需要 .xlsx 时后端 openpyxl 生成。 - Excel 导出:
print_area、page_setup(A4/横向/缩放适配)、print_title_rows(每页重复表头)、页眉页脚、水印(背景图片+只读建议)。 - 权限:方案文档中给出角色/数据权限设计(对应 FR 权限管理);实际交付物可用「按角色生成不同数据视图」模拟。
- 定时调度:提示用户可将生成脚本配置为 WorkBuddy 定时任务(automation),实现自动取数/生成/推送。
通用规范(严格遵守)
- 主题适配:Web 报表必须匹配当前 IDE 主题(浅色主题用浅背景深文字,深色主题用深背景浅文字);图表颜色显式设置,不使用会退回黑色的隐式 fill。
- 中国式数字习惯:金额默认 ¥ 与千分位;百分比带一位小数;金融场景红涨绿跌。
- 中文报表风格:表头居中加粗带底色、合并单元格表达层级、重要合计行突出(加粗/浅色底纹)。
- 代码即事实:所有数值计算落地为代码并运行验证;不依赖口算。
- 文件落盘:生成的 HTML/Excel 写入工作区并明确给出路径;Excel 用 openpyxl(无依赖环境问题时在 venv 安装)。
Resources
references/
finerport-capabilities.md— FineReport 11.0 产品能力地图(官方能力 → 本 Skill 实现映射表),用于需求识别与方案文档。web-report-guide.md— Web 报表/大屏实现指南:页面结构、布局模式、ECharts 主题与图表选型、参数联动钻取、导出打印、代码模式。excel-report-guide.md— Excel 中国式报表实现指南:分组/交叉/主子报表模式、样式、公式、数据验证、打印设置与完整示例。
assets/
web-report-template.html— 通用报表/大屏起步模板:标题 + 参数面板 + KPI 指标卡 + ECharts 图表 + 明细表,内置示例数据,含浅/深主题适配与打印样式。复制到工作区后改造。
scripts/
build_grouped_excel_report.py— 分组报表 Excel 生成示例(含小计/合计/样式/打印设置),作为 Excel 报表起点模板,可改造或参考。
Scan to join WeChat group