OFD电子发票号码提取器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_9355e276/shdskill22。
技能介绍
解决的问题
OFD 电子发票在国内早已普及,但拿到一张 .ofd 文件后,想把它读进 Excel 并不轻松。发票的关键数据并不摆在明面上:OFD 本质是一个 ZIP 包,内部用 XML 描述版式与内容,字段(如 InvoiceNo)只持有引用,真正的文本分散在页面内容对象的 TextCode 里。手工逐个打开解压、翻 XML,或者写一套临时脚本,对批量场景都难以复用。这个技能把这一过程固化成可重复执行的流程。
工作方式
核心是基于 GB/T 33190 的 OFD 结构做语义解析,而不是对整个文件做 OCR 或字符串搜索。运行时会弹出 tkinter 选择窗口,可以添加文件或添加文件夹,单次最多处理 200 个 OFD。对每个文件,程序会:
- 解压 OFD 容器,读取
Document.xml获取文档结构与页面映射 - 定位
CustomTags.xml与CustomTag.xml中的语义标签 - 沿着
ObjectRef→PageRef→Content.xml→TextObject→TextCode链路取回实际文本 - 遇到金额被拆成货币符号与数字多个对象的情况,按顺序拼接并过滤
¥、¥、逗号和空格
支持的发票类型覆盖增值税电子普通发票、增值税电子专用发票和全电发票(数电票)。提取字段包括发票号码、发票代码、开票日期、金额、税额、价税合计、购销方名称及税号。如果标准 CustomTag 路径上找不到发票号码,会回退到通用 XML 搜索模式,遍历包内 XML 查找 InvoiceNumber、发票号码、InvoiceNo 等标签,并可用正则匹配 20 位数字。
提取完成后自动生成 Excel 保存到桌面,文件名形如 OFD发票号码提取结果_YYYYMMDD_HHMMSS.xlsx。工作簿包含四个 Sheet:发票明细(序号、发票号码、发票代码、开票日期、金额、税额、价税合计、购销方名称及税号、文件名称、提取时间)、统计信息(总文件数、成功提取数、失败数、重复数)、失败列表(文件路径与失败原因)、重复列表(重复发票号码)。
适用边界
- 只处理
.ofd文件,PDF 发票不在范围内 - 单个文件大小限制 20MB
- 全流程在本地运行,发票数据不上传服务器
- 需要 Python 3.10+ 运行环境,以及
pandas、openpyxl、tkinter
使用场景
- 财务收到一个文件夹里几百张数电票,需要批量提取号码和税额后全部填进台账
- 报销复核时要把重复发票挑出来,避免同一张发票被两次报销
- 审计组要求将一批OFD发票的购销方与金额整理成Excel备查
- 涉密项目结算时发票只能在本地解析,不能上传到任何在线工具
适合人员
- 财务人员:每月要把大量电子发票登记进台账,并确保发票号码不重复
- 报销审核员:需要快速识别重复发票,防止同一票据重复报销
- 审计与稽核人员:要求批量核对发票明细并导出结构化Excel底稿
- 企业IT支持:为内部提供不上传数据的本地发票处理工具