欢迎来到"花花 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秒。
再看下我们一共生成了多少份文件:
掌握了方法,想生成多少份就是看心情了。