【Code With SOLO】用 SOLO 从零搭建一个智能 Excel 财务报表数据管理工具

1. 摘要

用 TRAE SOLO 从零搭建了一款面向银行/金融机构的 Excel 财务报表数据管理桌面工具,支持批量导入各类格式不规范的 Excel 报表、自动识别表结构、智能解析合并单元格、按原样预览数据、拖拽式构建报表模板、公式计算列,并兼容 Win7 32 位系统。整个项目约 6000 行 Python 代码,涵盖动态列检测、多级合并单元格模拟、跨时点数据自动匹配等复杂逻辑,全程由 SOLO 独立完成。

2. 背景

我从事金融数据处理工作,日常需要处理大量来自不同来源的 Excel 财务报表(如贷款分行业情况表、融资情况表等)。这些报表格式千差万别:

  • 有的有序号列,有的没有
  • 有的"项目"列跨 2-3 列合并,需要拼接
  • 有的表头占 3-4 行,包含多层级的合并单元格
  • 列名中混有换行符、多余空格、特殊字符
  • 同一个报表模板在不同月份的数据中,列的位置可能变化

原本每张表都需要手动整理、核对、汇总,耗时且容易出错。我希望用 SOLO 搭建一个工具,能自动识别各种表格结构,将数据导入数据库,然后通过模板化的方式快速生成需要的报表。

3. 实践过程

3.1 任务拆解

我将整个项目拆解为以下几个核心模块,逐步推进:

模块 功能 复杂度
数据库层 SQLite 建表、数据导入记录、模板管理
Excel 解析层 动态识别表结构、解析合并单元格、提取数据
GUI 界面 Tkinter 四选项卡界面、数据预览、模板工作台
模板工作台 原样预览、拖拽添加、公式计算列、导出
打包部署 PyInstaller 打包、Win7 32 位兼容

3.2 关键技术挑战与解决

挑战一:动态列检测

不同表格的"序号"和"项目"列位置不固定,有的表甚至没有序号列。

解决:通过关键词模糊匹配(支持"项 目"、"项目/权重"等变体)动态检测列位置,而非硬编码列索引。

挑战二:多列项目名合并

某些表格的"项目"名称跨多列(如"分类"占1列+"项目"占2列),需要合并为一个完整的项目路径。

解决:实现合并单元格模拟——空单元格继承同列上一行的值,当某列值发生变化时自动清除后续列的继承值,最终用 " > " 连接形成层级路径(如"fdsgs > ery > 1.1.1fgsdfhsf")。

挑战三:多行子标题的层级继承

表头占多行时,列名需要正确反映层级关系。例如 C 列的表头占 3 行、D 列占 2 行,则 D 是 C 的分支。

解决:先垂直继承(空单元格继承同列上一行),再水平继承(空单元格继承同行左侧邻居),最后垂直合并去重,生成完整的层级列名。

挑战四:原样预览 + 精确定位

用户反馈名称解析容易出错,要求按表格原样展示,用行列号精确定位单元格。

解决:新增 get_raw_record_data() 方法返回原始行列数据;添加列时使用 record_id + row_number + column_name 三维坐标精确定位,不再依赖项目名和列名解析。

挑战五:拖拽交互

用户希望直接拖拽单元格到报表模板区域。

解决:基于 Tkinter 事件绑定实现拖拽——<ButtonPress-1> 记录起始位置和单元格信息,<B1-Motion> 检测拖拽阈值,<ButtonRelease-1> 检查释放位置是否在目标区域。

3.3 SOLO 的核心价值

在这个项目中,SOLO 扮演了以下角色:

  1. 架构设计:从零设计了三层数据架构(数据库层 → 解析层 → 界面层),SOLO 独立完成了模块划分和接口设计
  2. 复杂逻辑实现:合并单元格模拟、多级表头继承、动态列检测等算法均由 SOLO 独立实现
  3. 持续迭代:经过多轮用户反馈,逐步修复了空列跳过、子标题误判、Win7 兼容等问题
  4. 全栈覆盖:从 Excel 解析到数据库操作,从 GUI 界面到打包部署,覆盖了完整的开发链路

4. 成果展示

技术栈

  • 语言:Python 3
  • GUI:Tkinter / ttk
  • 数据库:SQLite 3
  • Excel 解析:openpyxl(.xlsx)、xlrd(.xls)
  • 打包:PyInstaller(兼容 Win7 32 位)

核心功能

  1. 批量导入:支持单文件/文件夹递归导入,自动从文件名提取时间点
  2. 智能解析:动态检测列位置、模拟合并单元格、多级表头继承
  3. 数据查询:条件筛选 + SQL 自由查询 + CSV 导出
  4. 模板工作台
    • 原样预览:按表格原始格式展示数据
    • 拖拽添加:拖拽单元格到报表模板区域
    • 公式计算列:支持 {1} + {2}({1} - {2}) / {3} 等公式
    • 模板保存/加载/导出
  5. 跨时点取数:添加数据行时自动根据名称和时点匹配对应记录

代码规模

文件 行数 功能
app.py ~2,700 GUI 界面、交互逻辑
database.py ~1,900 数据库操作、模板管理
excel_importer.py ~1,100 Excel 解析、数据导出
合计 ~5,700

下载链接

通过网盘分享的文件:智能 Excel 财务报表数据管理工具.zip 链接: 百度网盘 请输入提取码 提取码: gh7e --来自百度网盘超级会员v9的分享

5. 效果与总结

提效效果

  • 数据导入:原本需要逐张表手动整理、核对格式,现在一键批量导入,自动识别表结构
  • 报表生成:通过模板工作台,拖拽即可构建报表模板,公式列自动计算,导出 Excel 一键完成
  • 跨时点对比:添加不同时间点的数据行后,自动匹配对应记录取数,无需手动查找

SOLO 在流程中的角色

SOLO 在这个项目中承担了从需求分析到代码实现的全流程

  1. 理解用户对"合并单元格"、“多级表头”、"跨时点取数"等业务概念的描述
  2. 设计合理的数据库表结构和代码架构
  3. 实现复杂的解析算法(合并单元格模拟、层级继承)
  4. 根据用户反馈持续迭代修复问题(10+ 轮交互)
  5. 处理打包部署的兼容性问题

可复用的方法

  1. 合并单元格模拟算法:通过"空单元格继承"策略,无需依赖 Excel 的合并信息,即可正确处理合并单元格数据——适用于任何丢失合并元数据的场景
  2. 动态列检测策略:通过关键词模糊匹配 + 数据行验证,自动适应不同表格结构——适用于需要处理多种格式表格的场景
  3. 行列号精确定位:用 record_id + row_number + column_name 替代名称解析,彻底避免名称匹配错误——适用于需要精确定位单元格的场景