帆软报表一键转换:.cpt → Sight Report,开源了
如果你正在把老系统从帆软(FineReport)迁到 Sight Report,最烦的往往不是数据,而是报表——几十上百张 .cpt 报表,单元格坐标、数据绑定、分组汇总、条件高亮、公式,全靠人工在设计器里一格一格搬,费时还容易搬错。
我们把内部一直在用的转换工具开源了:fine2sight,把帆软 .cpt 批量转换成 Sight Report 可以直接导入的网格报表(.mrg)。
它解决什么问题
.cpt 和 Sight Report 的网格报表格式并不兼容,结构、表达式语法、参数绑定的写法都不一样。人工重建的问题是:量大、枯燥、容易漏改一个单元格坐标或看错一个公式条件——出问题往往要等报表跑起来才发现。
fine2sight 把其中"有确定答案"的部分自动化,把"没有确定答案"的部分诚实地标出来交给人工,而不是替你悄悄猜一个可能是错的结果。
能自动转的部分
- 单元格网格:坐标、合并单元格、从属隐藏格
- 数据列绑定、扩展方向(纵/横),以及父格绑定(小计行、交叉表的父子关系)
- 分组、汇总(
sum/count/avg/max/min) - 条件高亮(公式条件):背景色、字体色、加粗
- SQL 数据集:参数语法翻译(含动态 SQL),连接名到数据源的映射
- 报表参数、查询面板控件
- 帆软表达式到 MagicScript 的公式翻译——同名同参数直接映射,改名/改写的函数按语义处理
一张 .cpt 里有多个 sheet 时,默认会合并成一个多页签报表,也可以选择拆成多张独立报表。
故意不转的部分
有些函数在帆软和 Sight Report 里参数含义不一致(比如 FIND 的 0/1-based 索引不同),转换器不会硬猜一个"看起来对"的结果,而是标红交人工确认——每次转换都会生成一份转换报告,逐条列出哪些地方需要人看一眼、哪些做了降级处理。结构化条件高亮(靠内部 op 码比较,语义不够确定)也是同样处理方式:宁可交给人工,不做静默的错误猜测。
怎么用
纯 Python 标准库实现,命令行三行搞定:
python3 convert.py 某报表.cpt -o out
python3 convert.py /报表目录 -o out -c config.json # 带数据源映射
python3 convert.py 某报表.cpt -o out --split-sheets # 多 sheet 拆成独立报表
也有桌面图形界面(Windows / macOS),不用装 Python,打包成单文件双击就能跑:
上图是桌面应用真实运行界面(未添加任何文件的初始状态)。下面两张是演示用截图,数据均为虚构:
|
① 添加文件/文件夹 → 映射数据源 → 选项
|
② 一键转换,逐张报表看结果
|
截图里的文件名、连接名均为演示用虚构数据,不含真实客户信息。
跨平台构建怎么做的
桌面版要出 Windows .exe 和 macOS .app 两个包,但 PyInstaller 不能交叉编译。我们没有自建构建机,而是用 GitHub Actions 的 windows-latest / macos-latest 真机 runner:打一个 tag,两个平台各自在自己的系统上原生打包,产物自动发布到 Releases。对开源项目来说这比自己维护一台构建机简单得多。
下载与源码
- 源码、Issue、转换报告示例:github.com/Sight-Data/fine2sight
- 直接下载 Windows / macOS 桌面版:Releases 页面
- MIT 协议,欢迎提 Issue 或 PR,尤其是帆软函数对照表(
function-mapping.md)里还没覆盖到的公式。
如果你手上正好有一批 .cpt 报表要搬家,试试看,遇到转不动的场景欢迎在 GitHub 上反馈。
