帆软报表迁移
用帆软报表转换器把 FineReport 的 .cpt 网格报表批量转成 Sight Report 的 .mrg,含操作步骤、数据源映射、配置项、支持与不支持的内容清单。
概述
帆软报表转换器把 FineReport 的 .cpt 网格报表批量转换为 Sight Report 网格报表文件 .mrg。单元格、数据绑定、扩展与分组、参数、查询面板、样式按确定的规则转换;无法确定翻译的公式和条件高亮会降级处理,并写进转换报告,交人工复核。
转换器是独立于平台的工具,纯 Python 标准库实现,也提供 Windows 和 macOS 的桌面版,桌面版无需安装 Python。转换在本机完成,输出的 .mrg 通过报表管理页导入平台。
功能入口
- 下载:官网下载中心
https://sightdata.top/downloads,取用最新的帆软报表转换器。桌面版启动时会检查更新,有新版会在界面顶部提示,网络失败时不提示。 - 导入:平台报表管理页的「导入」按钮,弹窗标题为「导入报表文件」。
操作步骤
用桌面版转换
- 下载并运行桌面版。Windows 为单个
.exe,需要系统已装 WebView2 Runtime(Windows 11 和多数 Windows 10 自带);macOS 为.app,未签名,首次打开需右键选择「打开」。 - 「输入」中添加
.cpt文件或文件夹,文件夹会递归查找.cpt。 - 选择「输出目录」。
- 在「数据源映射」中点击「扫描连接名」,为每个帆软连接填写它在 Sight Report 中对应的数据连接名称。名称在平台「数据连接」管理里查看,按名称解析,不需要 id。留空的连接转换后会标为待人工。开始转换时若仍有用到但未填写的连接,会弹窗提醒,可选择「去映射填写」或「仍然继续」。
- 在「选项」中设置同名文件的处理方式:覆盖、跳过或重命名;是否额外打包
.zip(可在平台按目录批量导入);「合并为多页签报表」默认勾选。 - 点击「开始转换」。完成后每张报表显示单元格数、待人工数、降级数和状态,可打开输出目录和各自的报告。
用命令行转换
# 单个文件
python3 convert.py 某报表.cpt -o out
# 整个目录,递归查找 .cpt
python3 convert.py /路径/报表目录 -o out
# 带数据源映射等配置
python3 convert.py /路径/报表目录 -o out -c config.json
# 多 sheet 拆成多张独立报表
python3 convert.py 某报表.cpt -o out --split-sheets
# 同时打包成可批量导入的 zip
python3 convert.py /路径/报表目录 -o out --zip out.zip
Linux 没有桌面版,直接使用命令行。
导入平台
- 打开报表管理页,点击「导入」。
- 拖入或选择
.mrg文件或转换器生成的.zip,支持格式为.mrg、.mrd、.mrs、.zip,一次最多 20 个文件。 - 导入后在设计器中打开,按转换报告逐项复核。
输出文件
| 文件 | 内容 |
|---|---|
<名称>.mrg |
转换后的网格报表。多 sheet 默认合并为一个多页签报表 |
<名称>__<sheet>.mrg |
拆分模式下每个 sheet 一张报表 |
<名称>.report.md |
转换报告:概览、待人工项、已降级项、自动处理说明 |
_summary.md |
批量转换多张报表时的汇总表 |
配置说明
复制 config.example.json 为 config.json,用 -c config.json 指定。所有键都可选,缺省走内置默认。
| 配置键 | 说明 | 取值/默认值 |
|---|---|---|
connection_map |
帆软连接名到 Sight Report 数据连接名称的映射。未配置的连接沿用帆软原始连接名,并在报告中提示核对 | 键为帆软连接名,值为数据连接名称 |
length_divisor |
行高列宽换算。导入后行列尺寸偏大或偏小时调整 | 示例文件中为 24130 |
font_size_divisor |
字号换算。导入后字偏大改大此值,偏小改小 | 示例文件中为 6 |
font_size_min、font_size_max |
转换后字号的下限和上限 | 示例文件中为 9 和 28 |
default_font_family |
默认字体 | 示例文件中为微软雅黑 |
font_name_map |
帆软字体名(小写)到中文字体名的映射 | 示例含 simhei 到黑体、simsun 到宋体 |
wrap_mode,命令行 --wrap-mode |
内容超长时的行为 | row 换行撑高行(默认);none 截断 |
auto_width,命令行 --auto-width |
给所有列标记按内容定宽,需要 Sight Report 2.0.25 及以上 | 默认关闭 |
auto_width_max,命令行 --auto-width-max |
与上一项配合,每列宽度上限,单位 pt | 不给则由引擎按设计宽度推导 |
merge_sheets |
是否把多 sheet 合并为多页签报表 | 默认合并;命令行 --split-sheets 等价于设为 false |
auto_width 是整表统一设置,不按帆软单元格的自适应设置逐格转换。
支持与不支持
可转换
| 内容 | 转换方式 |
|---|---|
| 单元格网格 | 坐标、合并单元格、被合并隐藏的从属格 |
| 数据绑定与扩展 | 数据列绑定、纵向和横向扩展方向 |
| 父格 | 显式父格转为父子关系,小计行和交叉表的父子关系自动还原。复杂分组小计的父格靠位置推断,建议人工核对 |
| 分组与汇总 | 分组,sum、count、avg、max、min |
| 条件高亮 | 公式条件,以及「本格值与常数比较」的结构化条件(后者按推定运算符语义转换,报告标为提示,需抽查颜色方向);动作为背景色、字体色、加粗,含单元格、行、列范围 |
| SQL 数据集 | 参数语法翻译(含动态 SQL 片段),连接名映射为数据源 |
| 报表参数 | 名称、默认值、类型推断、必填。多选控件的参数类型为列表,单个复选框的参数类型为布尔 |
| 查询面板 | 见下表 |
| 样式 | 字体、颜色、加粗、边框、行高列宽 |
| 多 sheet | 默认合并为多页签,也可拆分 |
| 公式 | 白名单内的函数,见下表 |
查询面板控件
| 帆软控件 | Sight 组件 |
|---|---|
Label |
文本 |
DateEditor |
日期,按格式区分日期、日期时间、月份 |
TextEditor |
输入框 |
NumberEditor |
数字 |
ComboBox |
下拉选择 |
ComboCheckBox |
多选下拉 |
RadioGroup |
单选 |
CheckBoxGroup |
复选框组 |
CheckBox |
开关,需要 Sight Report 2.0.30 及以上 |
FormSubmitButton |
查询按钮 |
TreeComboBoxEditor |
树形选择。层级可归约为单表自引用时转为 UNION 扁平数据集,否则转为按层懒加载;层级信息不全时标记交人工 |
下拉选项来自自定义键值时转为自定义选项,来自数据集字典时转为数据集绑定。控件位置原样保留;「不自动查询」转为打开时不取数;不允许为空转为必填。
公式函数
转换器采用白名单制:进入白名单的函数才视为干净转换,函数名相同但语义不同的(例如 FIND 的参数顺序和起始位置不同)不做直接映射。
| 类别 | 函数 |
|---|---|
| 同名直接 | SUM、MAX、MIN、COUNT、ROUND、ABS、CEIL、FLOOR、IF、YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、NOW、UPPER、LOWER、TRIM、LEFT、RIGHT、REPLACE、SEQ、ROW、ROWS、COLUMN、COLUMNS、PAGE、PAGECOUNT |
| 改名 | AVERAGE 转 avg,CONCATENATE 转 concat,LEN 转 length,DATEDELTA 转 addDays,MONTHDELTA 转 addMonths,SUBSTITUTE 转 replace,CNMONEY 转 numberToRMB,TRUNC 转 trunc,DATETONUMBER 转 dateToNumber |
| 按上下文或参数重写 | TODAY(),DATEINMONTH(日期, 1 或 -1) 转月初、月末(其他整数 n 转为月初加 n-1 天),DATEINQUARTER(日期, 1 或 -1) 转季初、季末,FORMAT(x, 格式串) 按格式串转数字或日期格式化,单参 ROUNDUP(x),FIND 参数对调并补偏移,SWITCH 转嵌套三元,SPLIT、INDEXOFARRAY,数据集 .select 简单等值取数,$$$ 转 $$value,条件中的单 = 转 == |
| 直通 | $参数、单元格名(如 B4)和区域(如 A1:A10) |
带位数的 ROUNDUP(x,d) 等不在白名单内的函数,不做静默映射,公式在报告中标记,交人工处理。
不转换或需人工
| 内容 | 处理 |
|---|---|
| 含未映射函数的公式 | 逐格标记为已降级,需人工或 AI 处理 |
| 其他结构化条件高亮(跨字段、字符串比较、引用其他单元格、组合条件)及不支持的高亮样式 | 标记为待人工,需在设计器中重新配置 |
未在 connection_map 配置的数据源 |
沿用帆软原始连接名,报告标记为待人工,需核对与平台连接名称一致 |
| 查询面板控件上的自定义 JS 联动(级联下拉、自定义校验) | 控件本身照常转换,JS 被忽略,报告标记交人工 |
自定义按钮(FreeButton) |
不转换,标记交人工(标准的查询按钮 FormSubmitButton 可转换) |
EditorHolder 容器控件 |
标记交人工 |
| 控件级装饰样式、面板标题、窗口位置 | 丢弃,保留标签、位置和尺寸 |
| 富文本、斜线表头 | 只提取纯文本 |
| 图表、子报表、填报 | 不处理 |
示例
把一个目录下的所有 .cpt 迁移到平台:
- 桌面版添加报表目录,输出目录选
D:\out。 - 点击「扫描连接名」,得到
DFHIS,在平台「数据连接」中查到对应连接名称为「门诊住院HIS库」,填入映射。 - 勾选打包
.zip,点击「开始转换」。 - 在结果列表里先处理「待人工」数不为 0 的报表,打开对应的
.report.md逐条复核。 - 平台报表管理页「导入」,选择生成的
.zip,导入后在设计器中预览,抽查汇总和计数值。
注意事项
注意:转换报告中标记的待人工和已降级项必须复核,导入后应逐张对比帆软原报表的数据结果。汇总、计数类公式建议首张导入后抽查一个值。
注意:SQL 中作为取值的参数翻译为预编译绑定
${$参数};只有动态 SQL 片段(如${if(...)}、含and、in等子句关键字的拼接)以及紧跟在.后的列名、表名位置的参数才翻译为文本内联的#{}。含#{}的 SQL 需复核参数来源是否受控。
注意:
REPLACE的旧子串按正则解释,含.、*、?、[、]等字符时需要复核。
提示:转换后行高、列宽或字号不合适时,调整
length_divisor和font_size_divisor后重新转换,不必逐张手改。
提示:暂不支持把锐浪(Grid++Report)报表转换为单据模板。