Python自动化之批量生成含指定数据的word文档

目录
  • 一、需求说明
  • 二、开始动手动脑
  • 三、总结

一、需求说明

在平时工作当中,经常需要处理文件,特别是Word,处理Word时会遇一类比较常见的场景:文档中大部分文字固定不变,小部分内容需要修改。

这时我们会机械的重复打开、修改、保存文档等一系列操作,内容少还可勉强接受,内容一旦多了,心里难免会心浮气躁。

今天我要给大家介绍一个秘密武器-docxtpl开发包,有了这个只需写一份模板,其他的都交给电脑自己进行。

首先需要你的电脑安装好了Python环境,并且安装好了Python开发工具。

如果你还没有安装,可以参考以下文章:

如果仅用Python来处理数据、爬虫、数据分析或者自动化脚本、机器学习等,建议使用Python基础环境+jupyter即可,安装使用参考Windows/Mac 安装、使用Python环境+jupyter notebook

如果想利用Python进行web项目开发等,建议使用Python基础环境+Pycharm,安装使用参考:Windows下安装、使用Pycharm教程,这下全了 和 Mac下玩转Python-安装&使用Python/PyCharm 。

秘密武器介绍

docxtpl:一个很强大的包,其主要通过对docx文档模板加载,从而对其进行修改。

pandas:提供高性能易用数据类型和分析工具

安装相关的第三方库

Windows下按住Win+R打开运行窗口,输入cmd进入命令提示符窗口(Mac打开终端即可),输入以下命令安装相关包:

pip install docxtpl

pip install pandas

使用案例

生成某学校计算机与信息工程学院的新生入学通知书合集。word模板和表格内容如下(双括号处为待填写的部分):

效果如下

二、开始动手动脑

第一步:导入相关模块:

from docxtpl import DocxTemplate
import pandas as pd
import os

第二步:用Python新建文件夹用来存放入学通知书,如果文件夹已存在代码会跳过这一步:

zpath = os.getcwd() + '\\'  #获取当前的路径
zpath = r'E:\python\tj' + '\\'
file_path = zpath + r'\通知书合集'
try:
    os.mkdir(file_path)  #创建一级目录
except:
    pass

第三步:读取csv文件中的数据:

把表格里的每一列数据分别赋值给一个series类型变量,可以把series看成数组一样的类型。

data = pd.read_csv(zpath+'AdmissionList.csv', encoding='gbk')  #读取csv里的目标数据
name = data["姓名"].str.rstrip()  # str.rstrip()用于去掉空白
academy = data["学院"].str.rstrip()
major = data["专业"].str.rstrip()
begin_date = data["开始时间"].str.rstrip()
end_date = data["结束时间"].str.rstrip()

第四步:将数据写入模板:

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

num = data.shape[0]   # 获取数据行数
for i in range(num):
    context = {
       "姓名": name[i],
       "学院": academy[i],
       "专业": major[i],
       "开始时间": begin_date[i],
       "结束时间": end_date[i]
}

选定模板,

tpl = DocxTemplate(zpath+'入学通知书.docx')

渲染替换,将context里的内容写入word模板中,

tpl.render(context)#渲染替换

保存文件,名字为:**的入学通知书。

tpl.save(file_path+r"\{}的入学通知书.docx".format(姓名[i]))

上述操作重复num(即表格中数据的行数)次,写完这些就可以在file_path中找到生成的文件啦。

可能出现的错误:

  1. 文件名乱码:可以尝试把解码方式换成gbk;
  2. 权限问题:可能是需要读入的数据文件正在被使用,关闭就行了;
  3. 生成的word文件行数混乱:可以把str.rstrip()写成str.rstrip(‘\n');
  4. 只能生成同一份word文档:每渲染一次,就要重新选定模板。

三、总结

通过本次实验,我们实现了根据模板批量生成含指定数据的word文件,我最开始看代码时不懂它是用的哪种类型变量接收从csv中读取的数据,通过打印输出才知道是Pandas数据类型中的Series,百度后知道它类似于一维数组,可以保存任何数据类型。在后来运行代码的过程中又不断地出现各种各样的错误,还都是没遇到过的。

到此这篇关于Python自动化之批量生成含指定数据的word文档的文章就介绍到这了,更多相关Python生成含指定数据的word文档内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 利用python程序生成word和PDF文档的方法

    一.程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob.Apache POI.Java2Word.iText等各种方式,以及使用freemarker这样的模板引擎这样的方式.php中也有一些相应的方法,但在python中将web/html内容生成world文档的方法是很少的.其中最不好解决的就是如何将使用js代码异步获取填充的数据,图片导出到word文档中. 1. unoconv 功能: 1.支持将本地html文档转换为docx

  • python实现的生成word文档功能示例

    本文实例讲述了python实现的生成word文档功能.分享给大家供大家参考,具体如下: 每月1次的测试费用报销,需要做一个文档.干脆花点时间写个程序吧. # -*- coding: utf-8 -*- from tools import get_data from docx import Document def new_doc(fee_data,doc_path,fee):#新建一个word文档,写入汇总表的数据 document = Document() p_total = document

  • python实现生成Word、docx文件的方法分析

    本文实例讲述了python实现生成Word.docx文件的方法.分享给大家供大家参考,具体如下: http://python-docx.readthedocs.io/en/latest/index.html 生成word的利器! 一.快速开始 from docx import Document document = Document() 1.段落 加一个段落,下面paragraph 是前面内容的光标指向,后面再该处插入一句话. paragraph = document.add_paragraph

  • 使用Python 自动生成 Word 文档的教程

    当然要用第三方库啦 :) 使用以下命令安装: pip install python-docx 使用该库的基本步骤为: 1.建立一个文档对象(可自动使用默认模板建立,也可以使用已有文件). 2.设置文档的格式(默认字体.页面边距等). 3.在文档对象中加入段落文本.表格.图像等,并指定其样式. 4.保存文档. 注:本库仅支持生成Word2007以后版本的文档类型,即扩展名为.docx 的. 下面分步介绍其基本使用方法: 步骤一: from docx import Document doc = Do

  • Python自动化之批量生成含指定数据的word文档

    目录 一.需求说明 二.开始动手动脑 三.总结 一.需求说明 在平时工作当中,经常需要处理文件,特别是Word,处理Word时会遇一类比较常见的场景:文档中大部分文字固定不变,小部分内容需要修改. 这时我们会机械的重复打开.修改.保存文档等一系列操作,内容少还可勉强接受,内容一旦多了,心里难免会心浮气躁. 今天我要给大家介绍一个秘密武器-docxtpl开发包,有了这个只需写一份模板,其他的都交给电脑自己进行. 首先需要你的电脑安装好了Python环境,并且安装好了Python开发工具. 如果你还

  • python批量从es取数据的方法(文档数超过10000)

    如下所示: """ 提取文档数超过10000的数据 按照某个字段的值具有唯一性进行升序, 按照@timestamp进行降序, 第一次查询,先将10000条数据取出, 取出最后一个时间戳, 在第二次查询中,设定@timestamp小于将第一次得到的最后一个时间戳, 同时设定某个字段的值具有唯一性进行升序, 按照@timestamp进行降序, """ from elasticsearch import Elasticsearch import os

  • Java 如何将表格数据导入word文档中

    Java 表格数据导入word文档中 个人觉得这个功能实在搞笑,没什么意义,没办法提了需求就要实现,(太好说话了把我) 我的实现是再word中生成一个与 excel行,列 一样的一个表格,然后把从excel拿到的数据(exList参数)依次放到word表格中 public static void createFile(HttpServletResponse response, String fileName, List<List<String>> exList) { try { s

  • Python实现自动化处理Word文档的方法详解

    目录 1. 批量生成Word文档 2. 将Word文档批量转换成PDF 3. 在Word文档中批量标记关键词 4. 在Word文档中批量替换关键词 使用Python实现Word文档的自动化处理,包括批量生成Word文档.在Word文档中批量进行查找和替换.将Word文档批量转换成PDF等. 1. 批量生成Word文档 安装openpyxl模块 pip install openpyxl 安装python-docx模块 pip install python-docx openpyxl模块可以读写扩展

  • 使用PHPWord生成word文档的方法详解

    本文实例讲述了使用PHPWord生成word文档的方法.分享给大家供大家参考,具体如下: 有时我们需要把网页内容保存为Word文档格式,以供其他人员查看和编辑.PHPWord是一个用纯PHP编写的库,使用PHPWord可以轻松处理word文档内容,生成你想要的word文档. 下载源码 安装 我们使用Composer 来安装PHPWord. composer require phpoffice/phpword 如何使用 自动加载 安装好phpword后,新建一个php文档,引入autoload.p

  • Python自动化之批量处理工作簿和工作表

    一.批量新建并保存工作簿 import xlwings as xw # 导入库 # 启动Excel程序,但不新建工作簿 app = xw.App(visible = True, add_book = False) for i in range(6): workbook = app.books.add() # 新建工作簿 workbook.save(f'e:\\file\\test{i}.xlsx') # 保存新建的多个工作簿 workbook.close() # 关闭当前工作簿 app.quit

  • python解析html提取数据,并生成word文档实例解析

    简介 今天试着用ptyhon做了一个抓取网页内容,并生成word文档的功能,功能很简单,做一下记录以备以后用到. 生成word用到了第三方组件python-docx,所以先进行第三方组件的安装.由于windows下安装的python默认不带setuptools这个模块,所以要先安装setuptools这个模块. 安装 1.在python官网上找到 https://bootstrap.pypa.io/ez_setup.py ,把代码保存到本地并执行: python ez_setup.py 2.下载

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

    一.需求说明 能够根据模板批量生成docx文档.具体而言,读取excel中的数据,然后使用python批量生成docx文档. 二.实验准备 准备excel数据: 这里是关于学生语数英成绩的统计表,文件名为score.xls 准备模板: 这是给学生家长的成绩通知书,文件名为template.doc 另外,在使用python进行实验之前,需要先安装第三方库docxtpl和xlrd,直接pip install就行: pip install docxtpl pip install xlrd 然后将xls

  • Python自动化短视频生成脚本实现热门视频流水线生产

    目录 一.核心功能设计 二.实现步骤 1. 图片爬取 2. 图片统一格式大小 3. 视频合成 4. 截取背景音乐 5. 视频和背景音乐合并 一.核心功能设计 首先我看了网上那些视频营销号的视频,大多数都是围绕一个主题通过几张图片进行视频轮播展示并添加一些热门歌曲作为背景音乐. 知道了大概的思路,接下来我们可以通过以下几步进行实现: 通过关键字进行图片批量爬取 对爬取的图片进行筛选并批量进行大小resize统一 将统一大小的图片进行视频合成 根据选取的歌曲,截取合适的背景音乐 将视频和截取的背景音

  • Python实现删除文件中含“指定内容”的行示例

    本文实例讲述了Python实现删除文件中含指定内容的行.分享给大家供大家参考,具体如下: #!/bin/env python import shutil, sys, os darray = [ "Entering directory", "In function ", "Leaving directory", "__NR_SYSCALL_BASE", "arm-hisiv100-linux-ar ", &q

随机推荐