1、需要用到docxtpl库,用于操作word模板
安装:pip insatll docxtpl
处理之前的word模板
处理后的word
下面直接上代码揭开它的神秘面纱:
第一步,读取excel中的内容
import os
import xlrd
from youlai.s_s.ExcelConfig import DataConfig
from docxtpl import DocxTemplate
class ExcelReader: def __init__(self,excel_file): """ 验证文件是否存在,存在读取,不存在报错 :param excel_file: :return: """ if os.path.exists(excel_file): self.excel_file = excel_file self.workbook = xlrd.open_workbook(self.excel_file) self._data=list() else: raise FileNotFoundError("文件不存在") def get_sheet_name(self): ''' 获取所有sheet名称 :return: ''' sheet_name_list = self.workbook.sheet_names() return sheet_name_list def data(self,sheet_name): """ 通过名称,索引读取sheet内容, 读取sheet内容 返回一个list里面元素为:字典 先获取首行 再遍历剩余测试行,与首行组成dict,放在list :return: """ sheet = self.workbook.sheet_by_name(sheet_name) title = sheet.row_values(0) for col in range(1,sheet.nrows): col_value = sheet.row_values(col) self._data.append(dict(zip(title, col_value))) return self._data
第二步,获取想要的字段,基于word模板,批量生成对应文件
class Add_word: def cop_word(self): filler = data[data_key.filler] context = { "购房人":data[data_key.buyer], "购买房号": data[data_key.room_number], "身份证号": data[data_key.buyer_ID], "付款金额": data[data_key.paid_amount], "购房人住址": data[data_key.address], "购房人电话": data[data_key.phone_number], "代理人": data[data_key.filler], "诉求": data[data_key.appeal], "合计": data[data_key.purchase_amount], } tpl = DocxTemplate(r'D:\PycharmProjects\youlai\s_s\北新机械城购房人诉求填报表.docx') #模板地址 tpl.render(context) # 渲染替换 tpl.save(f"D:\ss\wordfile\{filler}_write.docx") #新word保存地址 if __name__ == "__main__": reader = ExcelReader(r"D:/ss/商品房.xls") data_list = reader.data('Sheet1') data_key = DataConfig for data in data_list: Add_word().cop_word()
最后结果