前言
对于需要批量生成个性化名单的任务,使用Python可以很方便地完成。本文介绍了如何使用Python的openpyxl和docxtpl库,从Excel表格中获取数据,并根据指定的Word模板生成相应的个性化名单文档。通过学习这个示例,您可以了解到Python在处理办公自动化任务中的强大能力。
所需文件及文件格式说明
excel数据如下
word 模板如下
文件目录格式及生成后的文件
导入所需的模块:
import openpyxl from docxtpl import DocxTemplate
这里导入了两个模块。openpyxl
用于操作 Excel 文件,DocxTemplate
是一个用于生成 Word 文档的模板类。
打开 Excel 文件:
excel = openpyxl.load_workbook('名单.xlsx')
使用 openpyxl
模块的 load_workbook
函数打开名为 ‘名单.xlsx’ 的 Excel 文件,并将返回的工作簿对象赋值给变量 excel
。
选择工作表:
sheet = excel.worksheets[0]
通过 excel.worksheets
属性选择第一个工作表,并将其赋值给变量 sheet
。
获取数据列表:
names = [] works = [] for row in sheet.iter_rows(min_row=1, values_only=True): names.append(row[1]) works.append(row[2])
使用
iter_rows
方法遍历工作表的每一行,并使用values_only=True
参数以只获取单元格的值,然后将第二列的数据添加到names
列表中,将第三列的数据添加到works
列表中。
遍历数据并生成 Word 文档:
for na, wo in zip(names, works): print(na, '----', wo) doc = DocxTemplate('template.docx') context = {'name': na, 'work': wo} doc.render(context) doc.save(f'{na}.docx') print(f'{na}的word-生成完毕!!')
使用 zip
函数将 names
和 works
列表的元素一一对应,然后通过 for
循环遍历每个人名和工作。
在循环中,首先打印出人名和工作,然后通过
DocxTemplate
类打开名为 ‘template.docx’ 的模板文件,使用context
字典定义要替换的内容,name
和work
分别表示模板中的标记和要替换的值。接着,调用render
方法填充模板内容,再使用save
方法将生成的文档保存为以人名命名的 Word 文件。最后,打印出生成完成的提示信息。
完整代码
import openpyxl from docxtpl import DocxTemplate # 导入所需的模块 # 打开excel excel = openpyxl.load_workbook('名单.xlsx') # 选择工作薄-选择第一个 sheet = excel.worksheets[0] # 获取工作薄有多少数据 names = [] works = [] for row in sheet.iter_rows(min_row=1, values_only=True): # 将姓名和职位添加到对应的列表中 names.append(row[1]) works.append(row[2]) # 遍历数据并生成Word文档 for na, wo in zip(names, works): print(na, '----', wo) # 打开模板 doc = DocxTemplate('template.docx') # 设置内容对应关系 context = {'name': na, 'work': wo} # 填充内容 doc.render(context) # 保存新的文件,文件名为姓名 doc.save(f'{na}.docx') # 友好提示 print(f'{na}的word-生成完毕!!')
结束语
通过本文的介绍,相信您已经了解了如何使用Python生成个性化名单Word文档的方法。借助openpyxl和docxtpl库,我们可以轻松处理Excel表格中的数据,并根据指定的模板生成个性化的文档。这种方法不仅节省时间,还可以提高工作效率,尤其适用于需要大量生成名单或报告的场景。希望本文对您有所帮助,鼓励您在实际应用中灵活运用Python,享受自动化带来的便利与效益。祝愿您在编程的道路上越走越远,不断探索新的可能性!