当前位置: 首页 > news >正文

开发报销单自动填写工具,导入发票信息(金额,日期,品类),自动填充报销单,核对无误后导出,支持按公司规范调整,节省报销时间。

1. 实际应用场景描述

场景:

小李是一名市场专员,每月要处理大量差旅、采购发票,手动填写报销单非常繁琐,容易出错。公司报销单有固定格式,但每次都要重新输入金额、日期、品类,还要按部门、项目分类,耗时且易漏。

目标:

通过一个工具,导入发票信息(金额、日期、品类),自动填充到公司报销单模板中,支持核对、修改、导出 PDF/Excel,并可按公司规范自定义字段,实现高效、准确的报销流程。

2. 痛点引入

- 手动输入繁琐:每张发票都要逐项输入,浪费时间。

- 容易出错:数字、日期输错导致报销被退回。

- 格式不统一:不同公司报销单格式不同,切换麻烦。

- 核对困难:发票多时难以逐一核对金额与品类。

- 归档不便:纸质或电子报销单管理混乱。

3. 核心逻辑讲解

1. 发票信息导入:支持 CSV/Excel 导入发票数据(金额、日期、品类、备注)。

2. 报销单模板:使用 Excel 或 Word 作为模板,预设占位符。

3. 自动填充:读取发票数据,按模板规则填充对应字段。

4. 核对功能:展示填充后的报销单,允许用户修改。

5. 导出:支持导出为 PDF 或 Excel,符合公司提交要求。

6. 自定义规范:用户可配置文件定义公司报销单字段映射。

7. 模块化设计:

-

"Invoice" 类:发票实体

-

"ExpenseReport" 类:报销单管理

-

"Importer" 类:数据导入

-

"Exporter" 类:导出功能

-

"Config" 类:公司规范配置

4. 模块化代码(Python)

# reimbursement_tool.py

import csv

import json

from datetime import datetime

from pathlib import Path

class Invoice:

"""

发票类

"""

def __init__(self, amount, date, category, note=""):

self.amount = float(amount)

self.date = datetime.strptime(date, "%Y-%m-%d")

self.category = category

self.note = note

def to_dict(self):

return {

"amount": self.amount,

"date": self.date.strftime("%Y-%m-%d"),

"category": self.category,

"note": self.note

}

class Config:

"""

公司报销规范配置

"""

def __init__(self, config_file="config.json"):

self.config_file = config_file

self.data = self.load_config()

def load_config(self):

if Path(self.config_file).exists():

with open(self.config_file, "r", encoding="utf-8") as f:

return json.load(f)

else:

# 默认配置

default = {

"fields_mapping": {

"amount": "金额",

"date": "日期",

"category": "品类",

"note": "备注"

},

"company_name": "示例公司",

"template_path": "template.xlsx"

}

self.save_config(default)

return default

def save_config(self, data=None):

with open(self.config_file, "w", encoding="utf-8") as f:

json.dump(data or self.data, f, ensure_ascii=False, indent=2)

class Importer:

"""

数据导入类

"""

@staticmethod

def import_from_csv(path):

invoices = []

with open(path, "r", encoding="utf-8") as f:

reader = csv.DictReader(f)

for row in reader:

invoices.append(Invoice(row["amount"], row["date"], row["category"], row.get("note", "")))

return invoices

class ExpenseReport:

"""

报销单管理类

"""

def __init__(self, config):

self.config = config

self.invoices = []

def add_invoice(self, invoice):

self.invoices.append(invoice)

def generate_report_data(self):

"""

生成报销单数据(字典列表)

"""

mapping = self.config.data["fields_mapping"]

report = []

total = 0

for inv in self.invoices:

row = {mapping[k]: v for k, v in inv.to_dict().items()}

report.append(row)

total += inv.amount

return report, total

def display_report(self):

report, total = self.generate_report_data()

print("\n=== 报销单预览 ===")

for row in report:

print(row)

print(f"总金额:{total:.2f}")

class Exporter:

"""

导出类(模拟)

"""

@staticmethod

def export_to_excel(report_data, total, output_path="expense_report.xlsx"):

# 这里用打印模拟,实际可用 pandas/openpyxl 写入 Excel

print(f"\n导出到 {output_path}:")

for row in report_data:

print(row)

print(f"总金额:{total:.2f}")

@staticmethod

def export_to_pdf(report_data, total, output_path="expense_report.pdf"):

# 模拟 PDF 导出

print(f"\n导出到 {output_path}(PDF 模拟)")

for row in report_data:

print(row)

print(f"总金额:{total:.2f}")

def main():

config = Config()

report = ExpenseReport(config)

importer = Importer()

while True:

print("\n=== 报销单自动填写工具 ===")

print("1. 导入发票(CSV)")

print("2. 查看报销单")

print("3. 导出 Excel")

print("4. 导出 PDF")

print("5. 退出")

choice = input("请选择操作:").strip()

if choice == "1":

path = input("CSV 文件路径:")

invoices = importer.import_from_csv(path)

for inv in invoices:

report.add_invoice(inv)

print(f"已导入 {len(invoices)} 条发票。")

elif choice == "2":

report.display_report()

elif choice == "3":

data, total = report.generate_report_data()

Exporter.export_to_excel(data, total)

elif choice == "4":

data, total = report.generate_report_data()

Exporter.export_to_pdf(data, total)

elif choice == "5":

print("再见!")

break

else:

print("无效选择,请重新输入。")

if __name__ == "__main__":

main()

5. README 与使用说明

README.md

# 报销单自动填写工具

一个基于 Python 的工具,帮助职场人士快速导入发票信息,自动填充报销单,核对后导出,并支持按公司规范调整,节省报销时间。

## 功能

- 导入 CSV 发票数据

- 自动填充报销单

- 核对与修改

- 导出 Excel / PDF

- 自定义公司规范

## 使用方法

1. 安装 Python 3.x

2. 准备 `config.json`(可自动生成默认配置)

3. 准备发票 CSV 文件(列:amount, date, category, note)

4. 运行:

bash

python reimbursement_tool.py

5. 按菜单选择操作

## CSV 示例

amount,date,category,note

120.5,2024-06-01,交通,打车去机场

300.0,2024-06-02,住宿,酒店

## 许可证

MIT

6. 核心知识点卡片

知识点 说明

CSV 数据处理 使用

"csv" 模块读取发票数据

JSON 配置管理 存储公司报销单字段映射与规范

面向对象设计 分模块管理发票、配置、导入、导出

数据映射 将通用字段映射到公司特定字段

模块化 各功能独立,便于扩展

可扩展性 可接入

"pandas"、

"openpyxl"、

"reportlab" 实现真实导出

7. 总结

这个工具的核心价值:

- 节省时间:批量导入发票,自动填充报销单。

- 减少错误:避免手动输入导致的金额、日期错误。

- 灵活适配:通过配置文件适配不同公司报销单格式。

- 易于扩展:可升级为 GUI 工具或 Web 服务。

下一步建议:

1. 接入 OCR 识别(自动提取发票照片信息)。

2. 增加 图形界面(Tkinter/PyQt)。

3. 接入 公司 ERP/OA 系统 API,实现一键提交。

4. 增加 审批流程模拟。

如果你愿意,可以把这个工具升级成 带图形界面的桌面应用,并加上 OCR 发票识别功能,让它真正实现“拍照→自动填单→导出”的智能报销体验。

利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!

http://www.jsqmd.com/news/343269/

相关文章:

  • 李想汽车研究院:让AI从“工具使用者“进化为“工具创造者“
  • Advanced Genetics|作物杂种优势遗传机理的定量解析
  • 情人节公众号 SVG 交互设计方案整理:适合 2/14 的几种常用组件模型(以 E2 编辑器为例)
  • 【个人成长笔记】在 Windows 11 上使用 MemTest86 11.6(免费版)进行 DDR 内存测试(实操篇)
  • Python的基础类型,模块,存储类型
  • 批判的瘾:当“不自在”成为思想进化的第一推动力
  • 2026太空舱厂家推荐,本土智造品牌舱体研发与量产能力大盘点 - 品牌鉴赏师
  • 探索大数据领域数据目录的最佳实践方法
  • 解决SLAM14讲第九节initial.ply不能显示的问题
  • 论文生成PPT工具排行榜:7大软件+一键转化推荐
  • 提示工程架构师的故障注入测试:风险评估与应对
  • 2026年有实力的轮式高空作业平台,剪刀式高空作业平台厂家采购参考手册 - 品牌鉴赏师
  • 推荐 5 个好用的 AI 简历优化工具
  • PCIe-Link Status Dependencies
  • 推荐能做“简历 + JD 匹配”的工具
  • 2026微高压氧舱厂家权威推荐,舱体稳定性与续航能力深度评测 - 品牌鉴赏师
  • UVM-Dual Top Architecture
  • 【课程设计/毕业设计】基于php+vue大学生奖学金评定系统基于php+vue的高校资助管理系统的设计与实现【附源码、数据库、万字文档】
  • 2026年安全靠谱的零食品牌怎么选?从原料到品控为你提供全方位参考 - Top品牌推荐
  • 利用小波分解信号,再重构(matlab代码)
  • 2026年口碑好的大庆装饰,大庆全包装修公司实力推荐 - 品牌鉴赏师
  • 【课程设计/毕业设计】基于NodeJS大学生二手交易平台基于nodejs的校园二手市场的设计与实现【附源码、数据库、万字文档】
  • 深入解析:熟练版本控制 (Git)、CI/CD 流程。
  • 2026年2月安全靠谱的零食品牌推荐:8大零食品质品牌盘点与安全消费指南 - Top品牌推荐
  • 模糊神经网络机械故障诊断(MATLAB代码)
  • 解析muduo源码之 Poller.h Poller.cc
  • 毕业答辩PPT别发愁!这5款工具10分钟搞定排版,实测效率翻倍!
  • 智能街景识别之门头识别 广告牌识别 智慧城市治理 街道门头治理 广告图像识别第10476期 YOLO格式+voc图像格式 深度学习
  • Eureka在大数据领域的自动化部署方案
  • PHP毕设选题推荐:基于php+vue的高校资助管理系统的设计与实现基于PHP的高校学生资助管理信息系统【附源码、mysql、文档、调试+代码讲解+全bao等】