【Python-办公自动化】几分钟生成上万份合同(用此思路可以用于写作固定格式的文章)

欢迎来到"花花 Show Python",一名热爱编程和分享知识的技术博主。在这里,我将与您一同探索Python的奥秘,分享编程技巧、项目实践和学习心得。无论您是编程新手还是资深开发者,都能在这里找到有价值的信息和灵感。
自我介绍:
我热衷于将复杂的技术概念以简单易懂的方式呈现给大家,让每个人都能享受到编程的乐趣。我相信,通过不断的学习和实践,我们都能够成为更好的开发者。
关注提示:
如果您喜欢我的内容,别忘了点击关注哦!这样您就可以第一时间获取我的更新和分享。您的支持是我不断前进的动力。

目标:

今天的目标是将EXCEL里的内容用于批量签署合同,见下表:
在这里插入图片描述
我们需要根据表格每一行数据内容签订合同,见下图:
在这里插入图片描述
其实很简单 ,我们根据EXCEL表内容替换合同内{}内容即可,见下图:

在这里插入图片描述

# 导入DocxTemplate类,用于操作Word模板  
from docxtpl import DocxTemplate  
# 导入pandas库,用于数据处理  
import pandas as pd  
# 从openpyxl.utils.dataframe导入dataframe_to_rows函数,用于将DataFrame转换为行列表  
from openpyxl.utils.dataframe import dataframe_to_rows  
# 导入datetime模块,但在这个脚本中实际上并未使用其日期时间转换功能  
import datetime  
# 导入time模块,用于计算脚本执行时间  
import time  
  
# 记录脚本开始执行的时间  
s_t = time.time()  
  
# 从Excel文件读取数据到DataFrame  
df = pd.read_excel('各高校空调合同.xlsx')  
  
# 下面这行代码被注释掉了,它原本的作用是将签约日期列从字符串转换为datetime对象  
# 但由于后续代码直接使用了字符串形式的日期,所以这行代码在这里是多余的  
# df["签约日期"] = df["签约日期"].apply(lambda x: datetime.datetime.strptime(x, "%Y-%m-%d"))  
  
# 使用dataframe_to_rows将DataFrame转换为行的列表,每行是一个包含所有列数据的列表  
# 注意:这里设置了index=False(不包括索引),header=False(不包括列名)  
datas = [{"甲方": row[0], "乙方": row[1], "产品名称": row[2],  
          "产品价格": row[3], "保修期": row[4], "签约日期": row[5]}  
         for row in dataframe_to_rows(df, index=False, header=False)]  
  
# 打印datas列表,查看数据是否按预期转换  
print(datas)  
  
# 遍历datas列表中的每个数据项  
for data in datas:  
    # 打印当前正在处理的数据项  
    print(data)  
    # 加载Word模板  
    tpl = DocxTemplate('各高校安装空调合同书.docx')  
    # 打印模板对象,通常这一步是调试用的  
    print(tpl)  
    # 使用当前数据项渲染模板  
    tpl.render(data)  
  
    # 构造生成的Word文件的路径,以甲方名称命名  
    file_path = f'合同生成\\{data["甲方"]}的空调安装合同.docx'  
    # 保存渲染后的模板到指定路径  
    tpl.save(file_path)  
    # 打印生成文件的消息  
    print(f'{data["甲方"]}的空调安装合同已生成')  
  
# 记录脚本执行结束的时间  
e_t = time.time()  
  
# 计算并打印脚本执行的总时间  
print(f"共耗时{e_t-s_t}s")

运行代码看下用时多久:
在这里插入图片描述
用时3.3秒。

再看下我们一共生成了多少份文件:
在这里插入图片描述

掌握了方法,想生成多少份就是看心情了。

  • 11
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花花 Show Python

你的打赏会让我有创作的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值