news 2026/4/12 11:59:52

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

作者头像

张小明

前端开发工程师

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/3/31 10:40:50

这6款由AI驱动的专业工具,为论文写作提供了更快的速度和更高的质量保障

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

作者头像 李华
网站建设 2026/4/9 22:42:23

PCIe-Link Status Dependencies

2.9.1 Transaction Layer Behavior in DL_Down Status 关于DL_Down状态和热复位(Hot Reset)​ 下的事务层硬件行为规则。这些规则定义了PCIe IP核在极端异常情况下,如何通过硬件状态机确保系统稳定、避免死锁并实现有序恢复。 第一部分:DL_Down状态下的SoC硬件行为 DL_Do…

作者头像 李华
网站建设 2026/4/10 17:05:05

推荐能做“简历 + JD 匹配”的工具

在 2026 年,简历投递已经全面进化为“算法博弈”。如果你只是简单地把简历投出去,而没有针对 JD(职位描述)进行语义对齐,那么在 90% 的大厂招聘后台,你的匹配得分都会低于 60 分,直接落入“已读…

作者头像 李华
网站建设 2026/4/10 17:05:21

模糊神经网络机械故障诊断(MATLAB代码)

效果 用训练好的模糊神经网络对机械故障进行诊断,根据网络的预测值得到机械的技术状态。预测值小于 1.5 时为正常状态,预测值在 1.5~2.5 之间时为曲轴轴承轻微异响,预测值在 2.5~3.5 之间时为曲轴轴承严重异响预测值在 3.5~4.5 之间时为连杆轴承轻微异响,预测值大于 4.5 时为连…

作者头像 李华
网站建设 2026/4/1 5:46:18

【课程设计/毕业设计】基于NodeJS大学生二手交易平台基于nodejs的校园二手市场的设计与实现【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华