• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

教你使用Python根据模板批量生成docx文档

python 搞代码 4年前 (2022-01-07) 27次浏览 已收录 0个评论
文章目录[隐藏]

这篇文章主要介绍了教你使用Python根据模板批量生成docx文档,文中有非常详细的代码示例,对正在学习python的小伙伴们有很好地帮助,需要的朋友可以参考下

一、需求说明

能够根据模板批量生成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.paragraphs text = re.sub('name', stu['name'], paragraphs[1].text) paragraphs[1].text = text text = 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<em style="color:transparent">来源[email protected]搞@^&代*@码网</em>['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.rFonts r.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.paragraphs text = re.sub('name', stu['name'], paragraphs[1].text) paragraphs[1].text = text text = 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 for paragraph in paragraphs[1:]: for run in paragraph.runs: run.font.size = Pt(16) run.font.name = "宋体" r = run._element.rPr.rFonts r.set(qn("w:eastAsia"), "宋体") document.save(path + "\\" + r"{}的成绩通知单.docx".format(stu['name'])) 

四、实验结果

文件中的文件:

生成的文件样例:

到此这篇关于教你使用Python根据模板批量生成docx文档的文章就介绍到这了,更多相关Python批量生成docx文档内容请搜索gaodaima搞代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持gaodaima搞代码网

以上就是教你使用Python根据模板批量生成docx文档的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:教你使用Python根据模板批量生成docx文档

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址