news 2026/8/3 15:57:43

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

作者头像

张小明

前端开发工程师

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/7/31 9:56:38

AI技术支持的6款工具,为论文写作带来更快的完成速度和更出色的内容表现

针对学术论文写作需求,目前市场上有多种AI工具可同时满足写作辅助与降重需求。这些智能平台通过自然语言处理技术提供论文框架生成、内容优化以及相似度检测功能,适用于毕业论文撰写、课程报告整理等场景。值得注意的是,此类工具应作为效率提…

作者头像 李华
网站建设 2026/7/31 8:06:51

GDPR助力大数据产业的健康可持续发展

GDPR助力大数据产业的健康可持续发展 关键词:GDPR、数据隐私、大数据产业、合规发展、用户权利 摘要:在大数据时代,数据已成为“新型石油”,但数据滥用、隐私泄露等问题也像“石油泄漏”一样威胁着产业生态。欧盟《通用数据保护条…

作者头像 李华
网站建设 2026/7/31 2:47:04

AI驱动的6款高效工具,显著提升了学术论文写作的效率与整体质量

学术论文写作领域涌现出多款融合智能写作与查重功能的AI辅助工具,这些系统基于先进的自然语言处理算法,能够实现论文结构自动生成、文本质量优化以及重复率检测等核心功能,广泛适用于学位论文创作和学术报告撰写等场景。需要强调的是&#xf…

作者头像 李华
网站建设 2026/7/31 2:48:54

【个人成长笔记】在 Windows 11 上使用 MemTest86 11.6(免费版)进行 DDR 内存测试(实操篇)

【个人成长笔记】在 Windows 11 上使用 MemTest86 11.6(免费版)进行 DDR 内存测试(实操篇) 内存不稳定、报错蓝屏? 二手内存怕踩雷? 内存定位不准? 本文从MemTest86 版本选择到启动盘制作,再到 Windows 11 上使用 MemTest86 11.6(免费版)进行 DDR 内存测试。全程干货…

作者头像 李华
网站建设 2026/7/31 3:00:44

剑桥大学定义图形世界:神经网络让纹理压缩像画家调色一样自然

在数字图形的世界里,纹理就像是给3D模型穿上的衣服,让原本光秃秃的几何体变得生动逼真。然而,这些"衣服"往往非常占用存储空间和计算资源,就像一个衣柜里堆满了厚重的冬装。剑桥大学计算机科学技术系的研究团队在2026年…

作者头像 李华