文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么在Python中根据模板批量生成docx文档

2023-06-15 00:41

关注

今天就跟大家聊聊有关怎么在Python中根据模板批量生成docx文档,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

一、需求说明

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

二、实验准备

准备excel数据:

怎么在Python中根据模板批量生成docx文档

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

准备模板:

怎么在Python中根据模板批量生成docx文档

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

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

pip install docxtplpip 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['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 DocxTemplateimport pandas as pdimport osimport xlrdpath = 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 Documentimport refrom docx.oxml.ns import qnfrom docx.shared import Cm,Ptfor 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文档

python是什么意思

Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于编写自动化脚本,随着版本的不断更新和新功能的添加,常用于用于开发独立的项目和大型项目。

看完上述内容,你们对怎么在Python中根据模板批量生成docx文档有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯