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

最后结果

python基于word模板批量生成word文件的更多相关文章

  1. FluentData-新型轻量级ORM 利用T4模板 批量生成多文件 实体和业务逻辑 代码

    FluentData,它是一个轻量级框架,关注性能和易用性. 下载地址:FlunenData.Model 利用T4模板,[MultipleOutputHelper.ttinclude]批量生成多文件 ...

  2. 依据word模板批量生成试卷

    java-word-MassProduction 目录 使用方法 开发流程 一.使用方法 1.制造题库所需Word模板 需要填充数据的地方使用 ${pid} 代替. 将这个word选择另存为,保存格式 ...

  3. T4模板批量生成代码文件

    <#@ template debug="false" hostspecific="true" language="C#" #> ...

  4. C# 通过word模板动态生成Word

    object oMissing = System.Reflection.Missing.Value; Word._Application oWord = new Word.Application(); ...

  5. poi读写word模板 / java生成word文档

    有一word文档表格 形如: 姓名 ${name} 电话 ${tel} 从数据库读取记录替换上述变量 import java.io.FileOutputStream; import java.util ...

  6. 【转】- 使用T4模板批量生成代码

    前言 之前在 “使用T4模板生成代码 - 初探” 文章简单的使用了T4模板的生成功能,但对于一个模板生成多个实例文件,如何实现这个方式呢?无意发现一个解决方案 “MultipleOutputHelpe ...

  7. Freemaker基于word模板动态导出压缩文件汇总整理

    Freemaker基于word模板动态导出压缩文件汇总整理 Freemaker基于word模板动态导出单个文件思路和代码详情见连接: https://www.cnblogs.com/lsy-blogs ...

  8. C# 利用WORD模板和标签(bookmark) 批量生成WORD

    前言: 由于对C#操作WORD不熟悉,也就留下这么一篇水文,别吐糟...=_=||| 利用Microsoft.Office.Interop.Word (2003版也就11版)——因为部分客户端还是用O ...

  9. 代码批量生成WORD的遇到的问题及解决

    好久没搞工具了,最近因为处理大规模公文处理单文档,自己写了个批量处理WORD的程序:在调试过程中,主要遇到两个问题 第一个是WORD的模板 数据很多,但是WORD模板只需要一个,将数据替换WORD里标 ...

  10. Python 写了一个批量生成文件夹和批量重命名的工具

    Python 写了一个批量生成文件夹和批量重命名的工具 目录 Python 写了一个批量生成文件夹和批量重命名的工具 演示 功能 1. 可以读取excel内容,使用excel单元格内容进行新建文件夹, ...

随机推荐

  1. SQL_TIP_JOIN_x

    没有条件的JOIN会导致数据数量变为两表的数据量的乘积结果. 用ON来在这些结果里进行筛选 on T1.A = T2.A的时候,如果T1的A是不重复的,则实际上是在对T2现有数据做筛选,结果数据量&l ...

  2. eclipse设置UTF-8(字符编码集)所有方式

    一.全部方式 1.修改workspace编码 windows->preferences->gengral->workspace 选择other->UTF-8.  2.修改Con ...

  3. 第三周day3

    第三周day3,星期三 所花时间:1h 代码量:48 博客量:1 了解知识:Button触发点击事件的三种实现方式,onClick.匿名内部类方式.接口方式.

  4. 学习- vue 中 API $attr 用法

    2.4.0新增 定义:包含了父作用域不作为 prop 被识别(且获取)的 attribute 绑定( class 和 style 除外).当一个组件没有声明任何 prop 时,这里会包含所有父作用域的 ...

  5. [Oracle19C ASM管理] ASM的网络服务

    启用了ASM集群以后,网络管理放给了grid用户.grid用户的$ORACLE_HOME/network/admin有网络配置文件,而oracle用户下的网络配置文件则不存在了. [grid@cent ...

  6. J V M(二)双亲委派机制及native

    package java.lang;public class String {// 双亲委派机制: 安全// 应用程序加载器-扩展程序加载器-根加载器// 自底向上检查类是否被加载,自顶向下加载类// ...

  7. 我和Java这些年的故事(五)

    时光荏苒,我来到了IBM.和慕名已久的WebSphere Application Server(WAS)打起了交道. 之前我搞过Weblogic,对应用服务器的特性有了一定的了解.但WAS无疑更为庞大 ...

  8. VUE3声明插件TypeScript类型

    declare module '*.vue' { import type { DefineComponent } from 'vue'; // eslint-disable-next-line @ty ...

  9. 2. Marker 标记(就是在地图上放上标记)

    1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta charset="U ...

  10. imputation-文献:False signals induced by single-cell imputation(scRNA-seq插补引入的假阳性问题)

    文章题目 False signals induced by single-cell imputation 中文名: 单细胞插补引起的假信号 文章地址: https://f1000research.co ...