Skip to content

About

发票报销归档助手 —— 本地离线运行的 Windows 桌面软件:上传发票 PDF、自动识别发票信息(发票号码/开票日期/销售方名称/价税合计)并归档到本地 Excel。A local offline invoice-to-Excel archiving tool for Windows.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

发票报销归档助手 (Invoice Archive)

一款本地离线运行的 Windows 桌面软件:上传发票 PDF → 选择费用承担人 → 自动识别发票信息 → 自动追加写入本地 Excel,一站式完成报销归档。

所有识别与存储均在本机完成,不联网、不上传任何数据。

功能特性

  • 发票 PDF 上传 — 支持拖拽、批量选择,可直接拖入整个文件夹
  • 费用承担人管理 — 独立的增删改查页面,支持部门、启用/停用、搜索,数据存于 data/费用承担人.xlsx
  • 发票信息自动识别 — 自动提取 发票号码、开票日期、销售方公司名称、价税合计
  • 自动归档 — 连同所选费用承担人、识别时间自动追加写入 data/发票报销归档.xlsx,每次识别自动新增一行
  • 可维护的归档表 — 支付时间、费用类型、备注 等列可随时修改,支持多选批量设置支付时间、搜索、删除、按筛选结果导出
  • 识别结果可修正 — 结果表格内双击即可修正识别错误,修改即时同步回 Excel
  • 重复检测 — 同一发票号码重复归档时给出醒目提示
  • 可撤销 — 「撤销本次归档」一键回退本次写入的记录
  • 自动备份 — 每次写表前自动备份到 data/backup/,保留最近 30 份

界面预览

发票归档 归档记录 费用承担人
拖拽上传 + 选择承担人 归档明细与统计 承担人增删改查

运行 python main.py 即可看到完整界面。

快速开始

方式一:直接运行(推荐,无需安装 Python)

进入 dist/InvoiceArchive/ 目录,双击 InvoiceArchive.exe。

建议右键该 exe → 发送到 → 桌面快捷方式,方便日常使用。 整个 InvoiceArchive 文件夹可整体拷贝到任意位置(D 盘、U 盘均可),数据随文件夹走。

方式二:源码运行

# 1. 安装 Python 3.10 及以上版本
# 2. 安装依赖
pip install -r requirements.txt

# 3. 启动
python main.py

Windows 用户也可直接双击 启动软件.bat(首次运行会自动安装依赖)。

方式三:自行打包为 exe

双击 打包为exe.bat,产物位于 dist/InvoiceArchive/。

使用流程

步骤 操作
① 上传发票 把发票 PDF 拖入虚线框,或点击选择文件(支持批量、支持拖入文件夹)
② 选择费用承担人 在右侧下拉框中选择;名单在「③ 费用承担人」页随时增删改查
③ 识别并归档 点击「开始识别并归档」,自动识别发票信息并写入 Excel
④ 补充信息 在「② 归档记录」页修改支付时间、费用类型、备注等,支持批量操作

数据文件

软件运行后会自动在同目录下创建 data/ 文件夹:

文件 说明
data/费用承担人.xlsx 费用承担人名单:姓名 / 部门 / 状态 / 备注 / 创建时间
data/发票报销归档.xlsx 归档明细:序号、费用承担人、发票号码、开票日期、销售方公司名称、价税合计、费用类型、支付时间、备注、识别时间、源文件名
data/backup/ 每次改动前的自动备份(保留最近 30 份)

两张 Excel 均可直接用 Excel / WPS 打开查看、打印。请在软件未运行时编辑,避免文件被占用导致保存失败。

常见问题

Q:识别不准或识别失败?

请确认 PDF 是电子开票文件(含文字层),而非扫描图片或照片。扫描件无法自动识别,此时可在结果表格中手动填写,其余流程不受影响。识别结果永远支持人工修正,软件也提供多组规则兜底匹配不同版式的发票。

Q:提示「文件正被占用,保存失败」?

说明该 Excel 正在被 Excel / WPS 打开,关闭后重试即可。

Q:换电脑怎么办?

把整个软件文件夹(含 data 子文件夹)拷贝过去即可,数据全部随文件夹走。

Q:数据会上传到网上吗?

不会。识别、存储全部在本机完成,软件不联网。

技术栈

模块 选型
界面 Python + PySide6(Qt 6)
PDF 解析 pdfplumber(可选 pymupdf 加速)
数据存储 openpyxl 直接读写 xlsx
打包 PyInstaller(--onedir --windowed)

项目结构

InvoiceArchive/
├── main.py                  # 程序入口
├── app/
│   ├── config.py            # 路径与表结构定义
│   ├── excel_store.py       # Excel 数据层(原子写入 + 自动备份)
│   ├── invoice_parser.py    # 发票 PDF 识别
│   ├── worker.py            # 后台识别线程
│   └── ui/
│       ├── theme.py         # 主题与样式表
│       ├── widgets.py       # 通用组件(卡片、拖拽区)
│       ├── main_window.py   # 主窗口
│       ├── archive_page.py  # ① 发票归档页
│       ├── records_page.py  # ② 归档记录页
│       ├── bearers_page.py  # ③ 费用承担人页
│       └── bearer_dialog.py # 承担人编辑对话框
├── data/                    # 运行后自动生成的数据目录
├── requirements.txt
├── 启动软件.bat
└── 打包为exe.bat

设计要点

  • 数据安全:所有 xlsx 写盘采用「先写临时文件 → 原子替换」,杜绝中途异常导致表损坏
  • 识别鲁棒性:对 PDF 文本生成三种视图(原始 / 去行内空白 / 全压缩),配合多组正则依次匹配;销售方名称优先取「销售方」上下文,退化时取最后一个「名称:」(兼容购买方在前的版面)
  • 数据格式:发票号码等长数字强制文本格式,避免被 Excel 转成科学计数法

许可证

本项目采用 MIT License 开源。

About

发票报销归档助手 —— 本地离线运行的 Windows 桌面软件:上传发票 PDF、自动识别发票信息(发票号码/开票日期/销售方名称/价税合计)并归档到本地 Excel。A local offline invoice-to-Excel archiving tool for Windows.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages