• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    教你使用Python根据模板批量生成docx文档

    一、需求说明

    能够根据模板批量生成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['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文档内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • 使用python批量生成insert语句的方法
    • python基础学习之生成器与文件系统知识总结
    • python生成器generator:深度学习读取batch图片的操作
    • 教你怎么用Python生成九宫格照片
    • Python如何生成随机高斯模糊图片详解
    • python使用ProjectQ生成量子算法指令集
    • Python实现K-means聚类算法并可视化生成动图步骤详解
    • python基于opencv批量生成验证码的示例
    • 用python自动生成日历
    • Python趣味挑战之给幼儿园弟弟生成1000道算术题
    上一篇:pytorch Variable与Tensor合并后 requires_grad()默认与修改方式
    下一篇:Python Flask基础到登录功能的实现代码
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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