news 2026/5/23 18:50:36

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

作者头像

张小明

前端开发工程师

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

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解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 9:30:25

智能街景识别之门头识别 广告牌识别 智慧城市治理 街道门头治理 广告图像识别第10476期 YOLO格式+voc图像格式 深度学习

数据集说明 往期热门主题 主页搜两字"关键词"直达 代码数据获取: 获取方式:***文章底部卡片扫码获取***. 覆盖了YOLO相关项目、OpenCV项目、CNN项目等所有类别, 覆盖各类项目场景: 项目名称项目名称基于YOLOv8 智慧…

作者头像 李华
网站建设 2026/5/12 6:04:38

ADS1115 I2C 16位AD转换模块原理图设计,已量产

目录 1、核心 ADC 芯片:ADS1115 选型与引脚配置 2、宽电压供电与稳压电路设计 3、I2C 通讯接口设计 4、模拟量输入通道设计 本文设计的模拟量采集模块以TI 公司 ADS1115为核心,该芯片为 16 位高精度 Δ-Σ 型 ADC,具备内部精密参考电压、可编程增益放大器(PGA)及 I2C …

作者头像 李华
网站建设 2026/5/6 9:53:35

AI智能体入职需要情境工程指导,三步行动计划助你成功

为什么你刚招聘的新明星员工在初期表现不如现有员工?为什么新员工需要一段入职培训期才能达到工作状态? 答案是机构知识。新明星员工知道如何完成工作,这正是你雇用他们的原因。但他们需要时间来了解公司文化、流程、方法、应用程序、团队以及…

作者头像 李华