• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

博客园    首页    新随笔    联系   管理    订阅  订阅
python基于word模板批量生成word文件

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()

最后结果

 

posted on 2023-02-24 16:40  搁浅小夕  阅读(1348)  评论(1)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3