自动生成发票数据并存入Excel

news/2024/12/22 13:02:11/

自动生成发票数据并存入Excel

目录

  1. 简介
  2. 环境准备
  3. 代码拆分与详细解释
    • 导入依赖库
    • 初始化Faker对象
    • 生成随机发票信息
    • 保存发票信息到Excel文件
    • 流程执行
  4. 运行效果
  5. 注意事项

简介

在处理财务数据时,生成和管理发票是一项常见的任务。本文将指导你如何使用 Python 生成一组模拟的发票数据,并将其保存到 Excel 文件中。我们将使用 pandasopenpyxl 库来处理和保存数据,同时利用 faker 库生成假数据。

环境准备

为了确保代码能够正常运行,请先安装所需的 Python 库:

pip install pandas openpyxl faker

这些库的作用如下:

  • pandas:用于数据操作和分析。
  • openpyxl:用于读写 Excel 文件(.xlsx 格式)。
  • faker:用于生成假数据,如公司名称、日期等。

代码拆分与详细解释

导入依赖库

首先,我们需要导入必要的 Python 模块和库:

python">import random
from datetime import datetime, timedelta
from faker import Faker
import pandas as pd
  • random:用于生成随机数。
  • datetimetimedelta:用于生成随机日期。
  • Faker:用于生成假数据,如公司名称、地址等。
  • pandas:用于创建和操作数据框(DataFrame),并将数据保存为 Excel 文件。

初始化Faker对象

接下来,我们初始化一个 Faker 对象,设置其语言区域为中国大陆(zh_CN),以便生成中文格式的数据:

python">fake = Faker(locale='zh_CN')

Faker 是一个强大的工具,可以生成各种类型的假数据,包括但不限于姓名、地址、电话号码、公司名称等。通过设置 locale 参数,我们可以指定生成数据的语言和文化背景。

生成随机发票信息

我们定义一个函数 generate_invoice_data 来生成随机的发票信息。这个函数接收一个参数 num_invoices,表示要生成的发票数量。

python">def generate_invoice_data(num_invoices):invoices = []for _ in range(num_invoices):invoice_code = f"{random.randint(1000000000, 9999999999)}"  # 随机生成10位发票代码invoice_number = f"{random.randint(10000000, 99999999)}"    # 随机生成8位发票号码issue_date = fake.date_between(start_date='-1y', end_date='today')  # 发票日期在最近一年内verification_code = ''.join(random.choices('0123456789', k=6))  # 验证码为6位数字total_amount = round(random.uniform(100, 10000), 2)  # 合计金额,保留两位小数tax_rate = random.choice([0.03, 0.06, 0.09, 0.13])   # 增值税率total_tax = round(total_amount * tax_rate, 2)        # 合计税额buyer_name = fake.company()                          # 购方名称seller_name = fake.company()                         # 销售方名称invoice = {'发票代码': invoice_code,'发票号码': invoice_number,'开票日期': issue_date.strftime('%Y-%m-%d'),'验证码': verification_code,'合计金额': total_amount,'合计税额': total_tax,'购方名称': buyer_name,'销售方名称': seller_name}invoices.append(invoice)return invoices
解释
  • 发票代码 (invoice_code) 和发票号码 (invoice_number)

    • 使用 random.randint 生成固定长度的随机数字字符串。发票代码为10位,发票号码为8位。
  • 开票日期 (issue_date)

    • 使用 fake.date_between 生成过去一年内的随机日期。
  • 验证码 (verification_code)

    • 使用 random.choices 从字符集中随机选择6个字符,组成6位数字的验证码。
  • 合计金额 (total_amount) 和合计税额 (total_tax)

    • 使用 random.uniform 生成一个范围在100到10000之间的浮点数,作为合计金额。
    • 选择一个常见的增值税率(如3%,6%,9%,13%),并根据此税率计算合计税额。
  • 购方名称 (buyer_name) 和销售方名称 (seller_name)

    • 使用 fake.company() 生成随机的公司名称。

保存发票信息到Excel文件

我们定义一个函数 save_to_excel 来将生成的发票信息保存到 Excel 文件中:

python">def save_to_excel(invoices, file_path):df = pd.DataFrame(invoices)df.to_excel(file_path, index=False, engine='openpyxl')print(f"Data has been saved to {file_path}")
解释
  • 创建数据框 (df)

    • 使用 pandas.DataFrame 将发票信息列表转换为数据框。
  • 保存为 Excel 文件

    • 使用 pandas.DataFrame.to_excel 方法将数据框保存为 Excel 文件。index=False 表示不保存行索引,engine='openpyxl' 指定使用的引擎为 openpyxl,以支持 .xlsx 文件格式。

流程执行

最后,我们定义一个 main 函数来控制整个流程的执行:

python">def main():print("生成一组数据流程开始执行")num_invoices = 10  # 可根据需要调整发票数量invoices = generate_invoice_data(num_invoices)# 打印发票信息(可选)headers = ["发票代码", "发票号码", "开票日期", "验证码", "合计金额", "合计税额", "购方名称", "销售方名称"]print("\t".join(headers))print("-" * 120)for inv in invoices:row = [str(inv[h]) for h in headers]print("\t".join(row))# 存储到Excel文件excel_file_path = 'invoices.xlsx'save_to_excel(invoices, excel_file_path)print("流程执行结束")if __name__ == "__main__":main()
解释
  • 打印发票信息

    • 使用制表符 \t 分隔各列标题,并打印一行分割线。
    • 遍历每个发票记录,按列顺序打印每一行的内容。
  • 保存到 Excel 文件

    • 定义保存路径 excel_file_path,调用 save_to_excel 函数将发票信息保存到指定的 Excel 文件中。
  • 主程序入口

    • 使用 if __name__ == "__main__": 确保当脚本直接运行时,会调用 main 函数。

运行效果

运行上述脚本后,你会看到类似以下的输出:

生成一组数据流程开始执行
发票代码	发票号码	开票日期	验证码	合计金额	合计税额	购方名称	销售方名称
----------------------------------------------------------------------------------------------------
1234567890	12345678	2023-12-05	123456	2345.67	234.57	某某有限公司	某商贸有限公司
...
Data has been saved to invoices.xlsx
流程执行结束

同时,invoices.xlsx 文件会被创建并包含生成的发票信息。

注意事项

  • 发票代码和号码:在实际应用中,发票代码和号码应遵循特定规则,这里仅为示例随机生成。
  • 税额计算:这里的税额是基于一个固定的税率计算的,实际情况可能更复杂。
  • 文件路径:你可以根据需要修改 excel_file_path 变量以指定不同的文件名或路径。

通过本文提供的步骤和代码,你可以轻松地生成模拟的发票数据并将其保存为 Excel 文件。这不仅有助于测试和演示,还可以为实际业务场景提供参考。


http://www.ppmy.cn/news/1557193.html

相关文章

【D04】网络安全基本命令

网络安全基本命令 想学会网络安全,就必须学会基本的网络常用命令,才能更好的去掌握网络,保护自己的系统,防止入侵。我们必须学会的基本的网络命令主要是基于Windows NT平台下的基本命令,也就是说windows 98/windows ME的下部分命令是不能运行的。所以说&…

手机银行模拟器,一款高仿真银行app的模拟器,可以修改姓名 卡号 余额 做转账记录 做流水

📱手机银行模拟器让你自由定制你的金融生活。无论是流水账单、金额,还是个人信息,一切都可以按照你的意愿来模拟修改,让你体验模拟器带来的快乐! 链接:https://pan.quark.cn/s/c2f614f3447f 提取码&#…

配置清晰,nignx http tcp 代理 已经websocket

启动 docker run -it --name lv_ocr --privilegedtrue --restartalways --nethost -v $(pwd)/config/nginx.conf:/etc/nginx/nginx.conf -v $(pwd)/config/conf.d:/etc/nginx/conf.d -d harbor.jettech.com/jettechtools/nginx:1.21.4 [rootit4it-prd-99 config]# ls conf.d…

前端无感刷新token机制(一文说明白)

前言 用户登录之后,会返回一个用户的标识,之后带上这个标识请求别的接口,就能识别出该用户。 标识登录状态的方案有两种: session 和 jwt。这两种方案一个服务端存储,通过 cookie 携带标识,一个在客户端存…

DA-CLIP:Controlling Vision-Language Models for Universal Image Restoration

conference:2024 ICLR paper:https://arxiv.org/pdf/2310.01018 code:https://github.com/Algolzw/daclip-uir 文章目录 作者动机核心思想常见解决方案挑战本文解决方法 贡献方法基本框架Controller的优化与Loss函数数据对的生成基本框架数据…

windwos defender实现白名单效果(除了指定应用或端口其它一律禁止)禁止服务器上网

一、应用场景说明 当我们的一台windows服务器中毒,变成别人肉鸡,不断向外请示非法网站或攻击其它服务器。 要彻底清除相关木马或病毒往往需要的时间比较长,比较有效的方法是禁止服务器主动向外发包除了网站端口和远程程序除外。 其实这就是一…

#渗透测试#漏洞挖掘#红蓝攻防#SRC漏洞挖掘05之并发漏洞挖掘技巧

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 并发漏洞 1、刷赞 2、签到 3、突破限购 …

excel 使用vlook up找出两列中不同的内容

当使用 VLOOKUP 函数时,您可以将其用于比较两列的内容。假设您要比较 A 列和 B 列的内容,并将结果显示在 C 列,您可以在 C1 单元格中输入以下公式: 这个公式将在 B 列中的每个单元格中查找是否存在于 A 列中。如果在 A 列中找不到…