Python自动化:根据模板批量生成含指定数据的word文档
作者:一只河马h | 想学好Python
来源:简说Python
一、需求说明
效果如下
二、开始动手动脑
第一步:导入相关模块:
from docxtpl import DocxTemplate
import pandas as pd
import os
第二步:用Python新建文件夹用来存放入学通知书,如果文件夹已存在代码会跳过这一步:
zpath = os.getcwd() + '\\' #获取当前的路径
zpath = r'E:\python\tj' + '\\'
file_path = zpath + r'\通知书合集'
try:
os.mkdir(file_path) #创建一级目录
except:
pass
第三步:读取csv文件中的数据:
把表格里的每一列数据分别赋值给一个series类型变量,可以把series看成数组一样的类型。
data = pd.read_csv(zpath+'AdmissionList.csv', encoding='gbk') #读取csv里的目标数据
name = data["姓名"].str.rstrip() # str.rstrip()用于去掉空白
academy = data["学院"].str.rstrip()
major = data["专业"].str.rstrip()
begin_date = data["开始时间"].str.rstrip()
end_date = data["结束时间"].str.rstrip()
第四步:将数据写入模板:
遍历表格的每一行,将数据存入字典列表,
num = data.shape[0] # 获取数据行数
for i in range(num):
context = {
"姓名": name[i],
"学院": academy[i],
"专业": major[i],
"开始时间": begin_date[i],
"结束时间": end_date[i]
}
选定模板,
tpl = DocxTemplate(zpath+'入学通知书.docx')
渲染替换,将context里的内容写入word模板中,
tpl.render(context)#渲染替换
保存文件,名字为:**的入学通知书。
tpl.save(file_path+r"\{}的入学通知书.docx".format(姓名[i]))
1)文件名乱码:可以尝试把解码方式换成gbk;
2)权限问题:可能是需要读入的数据文件正在被使用,关闭就行了;
3)生成的word文件行数混乱:可以把str.rstrip()写成str.rstrip(‘\n’);
4)只能生成同一份word文档:每渲染一次,就要重新选定模板。
干货文章,求点赞转发支持。
--END--
扫码即可加我微信
老表朋友圈经常有赠书/红包福利活
如何找到我:
近期优质文章:
学习更多: 整理了我开始分享学习笔记到现在超过250篇优质文章,涵盖数据分析、爬虫、机器学习等方面,别再说不知道该从哪开始,实战哪里找了 “点赞”就是对博主最大的支持
评论