眾所周知word/WPS中的郵件合并功能可以根據(jù)word模板從excel表格中讀取數(shù)據(jù)涕蚤,進(jìn)而生成不同的文件正驻,可以說郵件合并是效率神器
但是郵件合并也有其缺陷抵拘,那就是每次合并數(shù)據(jù)都需操作插入合并域绰咽,如果經(jīng)常需要根據(jù)數(shù)據(jù)生成固定模板word文件嚷掠,那么就顯得很麻煩
顯然利用程序固定數(shù)據(jù)替換模式就極為方便,需要生成文件時可以一鍵操作
工具:python解釋器首量,xlrd包(Excel數(shù)據(jù)讀茸撤浴),docx-mailmerge包(郵件合并包)
程序有2種文件生成方式:每個生成的文件分別為單一文件加缘,所有生成文件構(gòu)成一個文件
docx-mailmerge僅支持docx格式文件
完成的word模板:
word模板
word模板制作步驟:
word模板制作步驟1
word模板制作步驟2
excel數(shù)據(jù):
excel數(shù)據(jù)
導(dǎo)入python模塊:
import os.path
import xlrd
from mailmerge import MailMerge
word模板和excel數(shù)據(jù)文件路徑參數(shù):
docx = r'E:\測試\證明-模板.docx'
xlsx = r'E:\測試\證明數(shù)據(jù).xlsx'
分別生成至不同文件:
filepath = os.path.dirname(docx)
workbook = xlrd.open_workbook(xlsx)
worksheet = workbook.sheet_by_index(0)
nrow = worksheet.nrows
for key in range(1,nrow):
with MailMerge(docx) as doc:
doc.merge(name = str(worksheet.cell_value(key, 1)),
position = str(worksheet.cell_value(key, 2)))
output = filepath + r'\證明-{}.docx'.format(str(worksheet.cell_value(key, 1)))
doc.write(output)
生成效果:
生成效果1
生成效果2
全部生成至同一文件:
workbook = xlrd.open_workbook(xlsx)
worksheet = workbook.sheet_by_index(0)
nrow = worksheet.nrows
list1 = [] # 空列表
for key in range(1,nrow):
dict_temp = {} # 空字典
dict_temp['name'] = str(worksheet.cell_value(key, 1))
dict_temp['position'] = str(worksheet.cell_value(key, 2))
list1.append(dict_temp)
with MailMerge(docx) as doc:
doc.merge_templates(list1, separator='page_break')
output = r'E:\測試\證明文件.docx'
doc.write(output)
生成效果:
生成效果
生成到同一文件有個小問題鸭叙,每頁證明文件后都有一頁空白頁,不過問題不大拣宏,打印時選擇奇數(shù)頁打印即可沈贝。