import os, xlrd
from docxtpl import DocxTemplate,InlineImage
from docx.shared import Mm
wb = xlrd.open_workbook('data.xls')
sheet = wb.sheet_by_name('Sheet1')
def print_out(tpl,out_file,n,size):
'''
:param tpl:自定义模板路径
:param out_file:保存生成的word文档路径
:param n:生成的列数
:param size:插入的图片尺寸
'''
rows = [dict(zip(sheet.row_values(0), sheet.row_values(i))) for i in range(1, sheet.nrows)]
doc = DocxTemplate(tpl)
for row in rows: ##按照数据中的字段来生成照片对象
if os.path.exists('zp/'+row['zp']+'.jpg'):
row['zp']=InlineImage(doc,'zp/'+row['zp']+'.jpg',width=Mm(size))
else:
row['zp']=InlineImage(doc,'mb/temp.png',width=Mm(size))
context = {"tbl_contents": [{'cols': rows[i:i+n]} for i in range(0, len(rows), n)] }
doc.render(context)
doc.save(out_file)
print_out('mb/纵向模板.docx','准考证打印_纵向.docx',1,30)
print_out('mb/横向模板.docx','准考证打印_横向.docx',2,30)
print_out('mb/存根模板.docx','存根打印.docx',6,25)