假设一个工作中的场景,我有一个邀请函模板,是word文档,
尊敬的 < 姓名 > < 性别 >:
… 邀请函内容 …
< 今天日期 >
然后又有一个邀请人名单,存在一个excel文档中。怎么利用python批量生成相应的邀请函呢?
韩梅梅 | 女士 |
李磊 | 先生 |
读取邀请人名单
定义一个函数,返回一个姓名+称呼的列表
import pandas as pd
……
def read_excel_to_tuples(file_path):
try:
# 读取Excel文件,header=none表示第一行不是标题
df = pd.read_excel(file_path,header=None)
# 检查是否有至少两列
if len(df.columns) < 2:
raise ValueError("Excel文件需要至少两列数据")
# 获取第一列和第二列数据
names = df.iloc[:, 0] # 第一列
titles = df.iloc[:, 1] # 第二列
# 创建元组列表
result = list(zip(names, titles))
return result
except Exception as e:
print(f"发生错误: {e}")
return []
list = read_excel_to_tuples('./execlfiles/name.xlsx')
#输出
[('韩梅梅', '女士'), ('李磊', '先生')]
通过输出的内容,可以看出上面那个函数测试通过。
安装python-docx库
执行pip install python-docx命令安装python-docx库,用于读取word文档并保存为新的文档。需要注意的是docx2python 库只是用于提取word文档内容。
读取模板内容,并批量生成相应邀请函
from docx import Document
……
# 读取邀请函模板
new_doc = Document('./wordfiles/invit.docx')
for name,call in list:
for paragraph in new_doc.paragraphs:
if "< 姓名 >" in paragraph.text:
paragraph.text = paragraph.text.replace("< 姓名 >", name)
if "< 性别 >" in paragraph.text:
paragraph.text = paragraph.text.replace("< 性别 >", call)
if "< 今天日期 >" in paragraph.text:
paragraph.text = paragraph.text.replace("< 今天日期 >", '2025-7-1')
new_doc.save(f'./wordfiles/{name}.docx')
这段代码先读取模板,再遍历前面步骤所获得的列表,替换所需要的内容,最后保存为一个正式邀请函
总结
这篇展示了如何用python的pandas和python-docx库,批量生成想要的文档内容。