一、需求说明

能够根据模板批量生成docx文档。具体而言,读取excel中的数据,然后使用python批量生成docx文档。

二、实验准备

准备excel数据:

这里是关于学生语数英成绩的统计表,文件名为score.xls

准备模板:

这是给学生家长的成绩通知书,文件名为template.doc

另外,在使用python进行实验之前,需要先安装第三方库docxtpl和xlrd,直接pip install就行:

pip install docxtpl
pip install xlrd

然后将xls和doc和python文件放在同一个目录下

三、代码实现

首先打开xls,读取数据:

workbook = xlrd.open_workbook(sheet_path)

然后从文件中获取第一个表格:

sheet = workbook.sheet_by_index(0)

然后遍历表格的每一行,将数据存入字典列表:

tables = []
for num in range(1, sheet.nrows):stu = {}stu['name'] = sheet.cell_value(num, 0)stu['class'] = sheet.cell_value(num, 1)stu['language'] = sheet.cell_value(num, 2)stu['math'] = sheet.cell_value(num, 3)stu['English'] = sheet.cell_value(num, 4)tables.append(stu)

接下来将列表中的数据写入docx文档,其实这个过程可以在读数据时同时进行,即读完一行数据,然后生成一个文档。

首先在指定路径生成一个docx文档:

document = Document(word_path)

然后逐行进行正则表达式的替换:

paragraphs = document.paragraphstext = re.sub('name', stu['name'], paragraphs[1].text)paragraphs[1].text = texttext = re.sub('name', stu['name'], paragraphs[2].text)text = re.sub('class', stu['class'], text)text = re.sub('language', str(stu['language']), text)text = re.sub('math', str(stu['math']), text)text = re.sub('English', str(stu['English']), text)paragraphs[2].text = text

其实不关心格式问题的,到现在为止就已经结束了。但是这样替换后docx中被替换的文字格式也被更改为系统默认的正文格式,所以接下来是将这些改成自己想要的格式:

遍历需要更改格式的段落,然后更改字体大小和字体格式:

for run in paragraph.runs:run.font.size = Pt(16)run.font.name = "宋体"r = run._element.rPr.rFontsr.set(qn("w:eastAsia"), "宋体")

最后保存文件:

document.save(path + "\\" + r"{}的成绩通知单.docx".format(stu['name']))

完整代码:

from docxtpl import DocxTemplate
import pandas as pd
import os
import xlrd
path = os.getcwd()
# 读表格
sheet_path = path + "\score.xls"
workbook = xlrd.open_workbook(sheet_path)
sheet = workbook.sheet_by_index(0)
tables = []
for num in range(1, sheet.nrows):stu = {}stu['name'] = sheet.cell_value(num, 0)stu['class'] = sheet.cell_value(num, 1)stu['language'] = sheet.cell_value(num, 2)stu['math'] = sheet.cell_value(num, 3)stu['English'] = sheet.cell_value(num, 4)tables.append(stu)
print(tables)# 写文档
from docx import Document
import re
from docx.oxml.ns import qn
from docx.shared import Cm,Pt
for stu in tables:word_path = path + "\\template.doc"document = Document(word_path)paragraphs = document.paragraphstext = re.sub('name', stu['name'], paragraphs[1].text)paragraphs[1].text = texttext = re.sub('name', stu['name'], paragraphs[2].text)text = re.sub('class', stu['class'], text)text = re.sub('language', str(stu['language']), text)text = re.sub('math', str(stu['math']), text)text = re.sub('English', str(stu['English']), text)paragraphs[2].text = textfor paragraph in paragraphs[1:]:for run in paragraph.runs:run.font.size = Pt(16)run.font.name = "宋体"r = run._element.rPr.rFontsr.set(qn("w:eastAsia"), "宋体")document.save(path + "\\" + r"{}的成绩通知单.docx".format(stu['name']))

四、实验结果

文件中的文件:

生成的文件样例:

使用python根据模板批量生成docx文档相关推荐

  1. python教程112-Python批量生成合同文档

    Python可是实现办公自动化的利器,本文使用Python批量生成合同,学会这个即可解决重复制作合同的问题 开发系统 :window10家庭版 示例工具:anconda3.7 python3.8 本文 ...

  2. python办公自动化之批量生成docx——根据excel生成word、根据word生成excel

    python办公自动化之批量生成docx--根据excel生成word 系列文章 本文目录 一.从excel读取 二.写入docx 三.批量生成docx 四.反向操作,根据word生成excel 系列 ...

  3. Excel转Word,Excel导出Word,利用Excel表批量生成Word文档,邮件合并进阶版

    单击播放视频教材 利用Excel数据批量生成Word文档升级版,Excel转W 01需求概述 假设有图1所示的数据,需要批量生成WORD成绩通知单,通知单必须遵循图2的样式. (案例中的姓名.学校名称 ...

  4. 20230508在Ubuntu22.04下使用python3批量转换DOCX文档为TXT

    20230508在Ubuntu22.04下使用python3批量转换DOCX文档为TXT 2023/5/8 16:27 在WIN10下请参考本文,在Ubuntu22.04下需要不通的插件! https ...

  5. 20230507使用python3批量转换DOCX文档为TXT

    20230507使用python3批量转换DOCX文档为TXT 2023/5/7 20:22 WIN10使用python3.11 # – coding: gbk – import os from pd ...

  6. Freemarker - 根据模板动态生成word文档

    文章目录 Freemarker 根据模板动态生成word文档 Freemarker 介绍: Freemarker 使用: freemarker加载模板目录的方法 参考资料 Freemarker 根据模 ...

  7. 高效办公!Python 批量生成PDF文档

    日常办公中,经常会使用PDF文档,难免需要对PDF文档进行编辑,有时候PDF文档中的大部分内容都是一样的,只是发送对象不同. 这种模板套用的场景下,使用Python进行自动化就尤为方便,用最短的时间办 ...

  8. 根据 Excel 数据表的内容和 Word 模板文件,批量生成 Word 文档

    概要:想必大家都遇到过批量生成 Word 文件的场景.我们这里有一个 Excel 数据表,那么如何根据这个数据表批量地生成 Word 文件呢?有一种方法就是我们常见的邮件合并,但是邮件合并的操作步骤太 ...

  9. pythondocx模板_python操作docx文档(转)

    关于python操作docx格式文档,我用到了两个python包,一个便是python-docx包,另一个便是python-docx-template;,同时我也用到了很出名的一个工具"pa ...

  10. FileMaker批量生成Word文档,带进度条

    在某些涉及到报表的项目开发中,可能经常会遇到需要批量的生成某些文档的操作,这些文档若是要点击一下,生成一个的话,就太浪费时间了.但若用PageOffice开发平台中的FileMakerCtrl控件来实 ...

最新文章

  1. SharePoint使用BCS开发你第一个应用程序(三)
  2. 64% 的企业未实现智能化,5成公司算法工程师团队规模小于 10人,AI 工程师的机遇在哪里?...
  3. oracle 控制文件在哪里设置_从Oracle到PostgreSQL:最全控制文件
  4. Python 的字符串转int
  5. 中台之上(二):为什么业务架构存在20多年,技术人员还觉得它有点虚?
  6. idea历史版本下载
  7. MySQL管理之 MyISAM和InnoDB存储引擎简单对比
  8. html 中电话号码的使用
  9. 拓端tecdat|R语言公交地铁路线进出站数据挖掘网络图可视化
  10. C# 赛邮接口短信API验证demo
  11. 102分布式电商项目 - JVM调优(理论篇)
  12. 十一大排序算法的实现
  13. ubutun 滑动 触控板_Ubuntu触控板支持多指手势和滑动切换应用
  14. Windows 下 android自动打包 volley项目
  15. script src 方式传递参数
  16. 3.微信小程序-B站:wxml和wxss文件
  17. android蓝牙4.0控制器,DFRobot Bluno控制器 蓝牙4.0 开发板 Arduino 安卓 IOS开发平台
  18. 支持向量机(SVM)之核函数
  19. linux下简单配置zlib软件
  20. 代码审计之PHP常用函数总结

热门文章

  1. 软件系统分析设计过程方法精要
  2. 制作一个简单的钓鱼网站
  3. 视频怎么剪辑才好看?学视频剪辑必读入门指南
  4. 关于golang导包的大小写敏感问题
  5. PRAM模型与Amdahl定律
  6. 砂.随笔.十七.谋定而后动
  7. 南大计算机面经(结果:WaitList)
  8. JS函数传参长度限制
  9. 准时下班系列_Word合集之第1集—批量设置嵌入型图片解决方案
  10. 7款颜值当道的 Linux 操作系统 !