夜雨聆风学习资料网

ARTICLE · 1240429

月底报销,我把一堆发票照片变成了 Excel 表

月底报销,我把一堆发票照片变成了 Excel 表
每天用Ai解决一个问题2026.08.22

月底报销,我把一堆发票照片变成了 Excel 表 · 报销

金额、日期、开票方、税号,自动排好

DOODLE

发票报销整理

财务工具

今天带你从零到一做出一个小工具。不是讲概念,是做完你就能用。

咱们要做的是发票报销整理。你月底肯定经历过。几十张发票拍了照存在手机里,报销要一张张手抄金额、日期、开票方,眼都花了还容易抄错。

做完这个工具,你把每张发票识别出的文字存成文本,脚本自动把金额、日期、开票方挑出来,排成一张 Excel,按文件名排好。你最后只核对一遍总额。

下面每一步都按「你打开什么、复制哪段、存成什么名、怎么跑、看到啥」来写。零基础也能跟。

先看清你要做出来的是个啥

想象一下这个结果。

你桌面有个文件夹,里面是「发票1.txt」「发票2.txt」,每张对应一张发票识别出的文字。以前你要对着照片逐个抄。

做完之后,你跑一下脚本,出来一张「报销表.xlsx」。第一列文件名,后面是日期、开票方、金额。你扫一眼,加一遍总额,交。

这个工具长这样(用文字描述结构)。

列
放什么
谁来填
文件名
对应哪张发票
脚本自动
日期
开票日期
脚本挑出
开票方
销售方名称
脚本挑出
金额
价税合计
脚本挑出

做出来之后,你省下的是一张张对着照片抄数字的手工活,和抄错重来的返工。

你需要准备的三样东西
准备项
说明
门槛
电脑装了 Python
没装去 python.org 下
装一次,永久用
openpyxl 这个库
写 Excel 的工具
装一次
发票识别文字
每张发票存一个 txt
用手机或 OCR 网页

重点说一下 OCR。OCR 是把图片上的字认出来变成文本的技术,手机扫文档、翻译 App 都靠它。你不用自己装 OCR,用手机自带的识别,或者任意能识别图片文字的网页,把每张发票的文字复制出来存成 txt 就行。

装库。装好 Python 后打开命令行,输入

pip install openpyxl

看到成功提示就装好了。

安全上必须先说一句。发票含税号、金额这些敏感信息,尽量本地处理,别传到不熟悉的网站。而且 OCR 不是绝对准,金额务必自己加一遍再交。报销关系到钱,AI 识别仅供参考,关键数字必须人工复核。

第一步 把发票变成文字

拿出手机,打开能识别图片文字的功能(很多手机相册长按图片就有,或者任意 OCR 网页)。

对着一张发票拍照识别,把出来的文字全选复制,存成一个 txt 文件,叫「发票1.txt」。第二张叫「发票2.txt」,以此类推。都放进桌面一个叫「发票txt」的文件夹。

这里有个小技巧。拍的时候把发票放平、光线足,字清楚,后面识别才准。歪着拍容易认错数字。

第二步 整理成 Excel

打开记事本,复制下面这段,存成「整理.py」,保存类型选「所有文件」,编码 UTF-8。和「发票txt」文件夹放同一目录。

import os, re from openpyxl import Workbook  folder = r'./发票txt'  # 每张发票识别出的文字存成一个 .txt rows = [] for f in sorted(os.listdir(folder)):     if not f.endswith('.txt'):         continue     text = open(os.path.join(folder, f), encoding='utf-8').read()     m = re.search(r'(?:价税合计|金额)[^0-9]{0,6}([0-9]+\.[0-9]{2})', text)     amount = m.group(1) if m else ''     d = re.search(r'(\d{4})[年/-](\d{1,2})[月/-](\d{1,2})', text)     date = d.group(0) if d else ''     s = re.search(r'名称[::]\s*([^\n]{2,30})', text)     seller = s.group(1).strip() if s else ''     rows.append([f, date, seller, amount])  wb = Workbook() ws = wb.active ws.append(['文件名', '日期', '开票方', '金额']) for r in rows:     ws.append(r) wb.save('报销表.xlsx') print('已生成报销表.xlsx,共', len(rows), '张')

怎么跑。在这个目录打开命令行,输入

python 整理.py

回车。你看到「已生成报销表.xlsx,共 N 张」,文件夹里就多了一张 Excel。双击打开,四列整整齐齐。

我踩过的坑

第一个坑,拍歪了金额认差十倍。

有一张发票我斜着拍,OCR 把「128.00」认成了「1280.00」,差了十倍。那个月报销总额对不上,财务打回来,我一张张重加才发现。后来我每张都自己加一遍总额,宁可慢点也不交错。

第二个坑,金额没匹配到。

有张发票金额写法是「金额(小写)¥1,280.00」,我的正则没认出带逗号的。后来我把逗号先去掉再匹配,或者手动补那一行。

第三个坑,开票方抓错。

有的发票「名称」出现两次(购买方和销售方),脚本抓到了第一个也就是我自己的名字。后来我改成抓「销售方」后面的名称才对。

怎么知道你做对了

验收标准很简单。

你拿三张发票试,跑出来三行,日期、开票方、金额都对。再把金额加起来,和脚本里看到的一致。

能,就对了。但记住,交之前你亲自加一遍所有金额,别直接信脚本的数。

还能再进一步

做出来之后,你可以加两样东西。

一个是自动算总额。在 Excel 最后加一行 SUM,省你手加。

一个是按日期排序。脚本里 sorted 已经按文件名排,你可以改成按日期排,报销单看起来更顺。

这两样不是必须。但加上之后,你交给财务的就是一张干净又对得上的表。

做完这件东西之后

我第一次做出来那天,月底二十五张发票。以前我要对着照片抄一小时,还总怀疑抄错。那回我识别完跑一下,三分钟出表,然后自己加了一遍总额,心里有底才交。

那一刻我明白,工具替我干的不是「判断」,是「抄写」这种重复活。判断和核对,永远留给我自己。

你不用懂 OCR 原理。你要的只是一个「把字认出来、让脚本排一排」的动作。

剩下的是它帮你排,你帮自己核对。

这一篇带你做出来的是发票报销整理。下一篇,咱们一份模板加一份名单,批量生成几十份 Word。

发票怎么拍更准

OCR 准不准,七分靠拍。给你几条实在的。

做法
原因
放平、别斜
斜了数字易认错
光线足、别反光
反光处字发白认不出
只拍票面
别把桌子背景拍进去
一张一拍
别两张叠着拍

拍完识别完,别急着跑脚本。先肉眼扫一眼文字,明显的错字先改掉,后面脚本才挑得准。如果一张发票跨了两行文字,识别出来也是连着的,你存 txt 前顺手断一下行,后面挑金额更稳。

报销表还能加点啥

出来的是四列基础表,你可以按公司模板再加。

加的列
怎么来
类别
餐饮、交通、住宿自己标
部门
从名单或文件名带
备注
写清楚这笔是啥

加完这层,财务拿到的是一张能直接入账的表,不只是流水。报销无小事,慢一点比对快一点被退强。记得再次提醒自己,金额那一列是机器认的,交之前你亲自加一遍,别偷这个懒。

一个人也能用这套

你如果发票不多,比如就五六张,也值得用。手动抄五六张容易,但月底累的时候最容易抄错。把这套当成一个「防错网」,识别完跑一下,金额列出来你加一遍,比纯手抄多一层保险。工具不是只给大量用的,给怕错的人用也一样好使。别觉得少就懒得用,错往往出在觉得少的时候。

一点小提醒

识别文字那一步,能用手写转文字的也行,只要最终是 txt 就能进脚本。关键不是用什么识别,是识别出干净的文字。文字越干净,脚本挑金额越准,你核对越省心。

可复制的方法表
步骤
动作
注意
第一步
装 Python,命令行输 pip install openpyxl
装时勾选 add to path
第二步
每张发票拍正、识别、存成 发票N.txt
放平拍,字清楚
第三步
复制脚本存成 整理.py,跑 python 整理.py
金额带逗号要处理
第四步
打开报销表.xlsx 检查四列
抓销售方名称别抓错
第五步
自己加一遍所有金额再交
OCR 不准,必须人工复核

我是 Jeff,每天用 AI 解决一个真实问题。这一篇,是我替你亲自试过的。

如果你觉得今天这篇有收获,欢迎点赞、在看、转发三连,我们下篇见

赞
在看
收藏

THANKS FOR READING

相关学习资料