news 2026/6/15 15:38:29

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

作者头像

张小明

前端开发工程师

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/6/15 10:27:20

异步批处理优化:DeepSeek API调用成本降低60%实战技巧

一、问题背景与成本困境1.1 API调用成本现状随着人工智能技术的快速发展,DeepSeek等大模型API已成为企业智能化转型的核心基础设施。但在实际应用中,高频次的API调用往往导致惊人的成本支出:某中型电商平台每日调用量:120万次单次…

作者头像 李华
网站建设 2026/6/15 10:30:03

2026代码趋势前瞻:DeepSeek-V4 mHC架构实操与复杂工程逻辑无缝转化之道

2026代码趋势前瞻:DeepSeek-V4 mHC架构实操与复杂工程逻辑无缝转化之道摘要站在2026年的技术前沿,人工智能与软件工程的融合正以前所未有的速度重塑代码的书写、理解与维护范式。DeepSeek-V4及其创新的混合层次计算架构正引领着一场静默的革命&#xff0…

作者头像 李华
网站建设 2026/6/15 10:29:31

告别繁琐!GISBox一键搞定地形下载与3DTiles导出,效率提升90%

GeoTIFF是一种在TIFF图像格式基础上扩展了地理空间参考信息的栅格格式,广泛用于遥感影像和数字高程模型(DEM)。它可嵌入投影坐标系、椭球参数等元数据,是GIS和卫星遥感领域的行业标准之一。常用于地形建模的输入源数据。 最近GIS…

作者头像 李华
网站建设 2026/6/15 13:39:25

6款智能论文辅助工具因其改写能力和团队协作优势,登上高效学术推荐榜

学术写作领域现有多款智能辅助工具整合了文本生成与查重降重功能,依托先进的自然语言处理算法实现论文结构设计、语言润色及原创性检测,能有效支持学位论文创作和学术报告撰写等需求。需要强调的是,这类技术工具应当定位为研究效率的辅助手段…

作者头像 李华
网站建设 2026/6/15 13:15:17

华为OD技术面真题 - 计算机网络相关 - 4

文章目录简单介绍一下SYN FloodSYN Flood的常见形式如何缓解SYN FLood介绍一下UDP Flood如何缓解UDP Flood简单说说中间人攻击简单介绍一下SYN Flood SYN Flood 是互联网上最原始、最经典的 DDoS(Distributed Denial of Service,分布式拒绝服务&#xf…

作者头像 李华