利用Python根据模板生成Word文档
文章目录
- 背景
- EXCEL的用例
- Word内容
- Python处理
- 读取excel的内容
- 将同模块的用例保存到同一个对象
- 采用DocxTemplate根据模板生成word文件
- 生成结果如下
- 全部代码如下
背景
目前测试用例使用excel整理后,后期需要变成word文件。采用手工粘贴赋值整理费时费力,随采用python程序处理,从工具人解放出来。
EXCEL的用例
excel的用例如下,一般会有很多模块,且至少包含所属模块,用例标题,前置条件,步骤,预期结果等内容 。
Word内容
需要生成Word的内容如下,就是将excel的内容填充到以下。
Python处理
1.使用pandas读取excel中列的内容
2.将同模块的用例保存到同一个对象(用来生成一个word文件)
3.采用DocxTemplate根据模板生成word文件
读取excel的内容
def creatData(file):""":param file: 需要生成数据的excle文件:return: 序列号数据"""df = pd.read_excel(file)test_data = []for i in df.index.values: # 根据i来获取每一行指定的数据 并利用to_dict转成字典row_data = df.loc[i, excelCol].to_dict()test_data.append(row_data)return test_data
将同模块的用例保存到同一个对象
excelCol = ['所属模块', '用例标题', '步骤', '预期', '前置条件']# 获取excel中列的去重内容
data_moudle = pd.read_excel(excelFile)
moudle = pd.DataFrame(data_moudle['所属模块']).drop_duplicates(subset=None, keep='first', inplace=False).to_dict('list')["所属模块"]
allData = []
# 声明拼接的数组,用来生成文件内容
for i in moudle:item = {"SSMK": i, "table": []}allData.append(item)for name in test_data:for index, key in enumerate(moudle):if name[excelCol[0]] == key:allData[index]["table"].append({"YLBT": zhaunyi(name[excelCol[1]]), "BZ": zhaunyi(name[excelCol[2]]), "YQ": zhaunyi(name[excelCol[3]]),"QZTJ": zhaunyi(name[excelCol[4]])})
采用DocxTemplate根据模板生成word文件
模板文件tem.docx如下
def createDoc(contexts):""":param contexts: 生成文件的内容:return: 生成文件"""for index, context in enumerate(contexts):doc = DocxTemplate("template/tem.docx")# 执行替换doc.render(context)# #保存新的文档doc.save("./case/%s.docx" % (str(index) ))
生成结果如下
会根据excel中的模块生成对应的docx文件,此文章有三个模块,则会生成三个文件。
全部代码如下
# -*- coding:utf-8 -*-
import pandas as pd
from docxtpl import DocxTemplate
import os
import shutil# 声明需要生成的所属模块
# 读取excel的文件包括路径和名称以及后缀名称
excelFile = 'excelCase/test.xlsx'
# 读取excel中的列,顺序不能变,列名称要跟excel的名称对应
excelCol = ['所属模块', '用例标题', '步骤', '预期', '前置条件']# 获取excel中列的去重内容
data_moudle = pd.read_excel(excelFile)
moudle = pd.DataFrame(data_moudle['所属模块']).drop_duplicates(subset=None, keep='first', inplace=False).to_dict('list')["所属模块"]print(moudle)def zhaunyi(str):# 由于excel中某些单元格为空,因此处理为无# AttributeError: 'float' object has no attribute 'replace'if (type(str) == float):return '无';""":param str: 需要转义的内容:return: 将特殊字符转义"""return str.replace("&", "&").replace("<", "<").replace(">", ">")def createDoc(contexts):""":param contexts: 生成文件的内容:return: 生成文件"""for index, context in enumerate(contexts):doc = DocxTemplate("template/tem.docx")# 执行替换print(context)print(index)doc.render(context)# #保存新的文档# doc.save("./case/%s.docx" % (str(index) + "-" + str(context.get("SSMK")).replace("/", "-")))doc.save("./case/%s.docx" % (str(index) ))def cleanDoc(file):""":param file: 传入需要清空的文件目录:return: 从新生成文件目录"""if os.path.exists(file):# 删除case目录shutil.rmtree(file)# 创建目录os.mkdir(file)allData = []# 声明拼接的数组,用来生成文件内容
for i in moudle:item = {"SSMK": i, "table": []}allData.append(item)def creatData(file):""":param file: 需要生成数据的excle文件:return: 序列号数据"""df = pd.read_excel(file)test_data = []for i in df.index.values: # 根据i来获取每一行指定的数据 并利用to_dict转成字典row_data = df.loc[i, excelCol].to_dict()test_data.append(row_data)return test_datatest_data = creatData(excelFile)for name in test_data:for index, key in enumerate(moudle):if name[excelCol[0]] == key:allData[index]["table"].append({"YLBT": zhaunyi(name[excelCol[1]]), "BZ": zhaunyi(name[excelCol[2]]), "YQ": zhaunyi(name[excelCol[3]]),"QZTJ": zhaunyi(name[excelCol[4]])})cleanDoc("./case")createDoc(allData)
利用Python根据模板生成Word文档相关推荐
- python依据模板生成word文档_python自动化生成word文件,word格式套用创造模板
# coding=gbk from docx import Document # 导入docx模块 from docx.enum.text import WD_PARAGRAPH_ALIGNMENT ...
- 使用word模板生成word文档的各类方案
使用word模板生成word文档的各类方案 生成word的各种方案 word另存xml进行后续处理 2003版本word(.doc)的xml处理并生成word 2007版本word(.docx)的xm ...
- Excel转Word,Excel导出Word,利用Excel表批量生成Word文档,邮件合并进阶版
单击播放视频教材 利用Excel数据批量生成Word文档升级版,Excel转W 01需求概述 假设有图1所示的数据,需要批量生成WORD成绩通知单,通知单必须遵循图2的样式. (案例中的姓名.学校名称 ...
- 根据标准word模板生成word文档类库(开源)
前言 最近因项目需要要自定义标准word模板,并以编码方式操作word模板.填充数据和生成word文档,于是自己写了条小"内裤"来实现这个功能.该"内裤"只 ...
- JAVA实现模板word文档导入,Java依据word模板生成word文档之后台解析和实现及部分代码(一)...
Java根据word模板生成word文档之后台解析和实现及部分代码(一) 后台主要工作是解析XML定义的标签文件,并获取到数据集,放入到Map中,然后调用Jacob.jar中提供的相关方法来实现替换. ...
- freemarker根据模板生成word文档,换行
freemarker根据模板生成word文档,其它地方已经说的非常清除了,在此简单再说以下. 1.制作word模板,另存为xml文件.在此我另存为的时windows xml,它和windows 200 ...
- Android 使用模板生成Word文档,支持手机直接查看word
最近在项目工作中,碰到一个很棘手的需求,说是要在手机端根据模板生成word文档,而且不借助第三方的软件可以查看word文档,一开始听这个需求差不多蒙了,这要怎么做,为什么不把生成word文档这个工作放 ...
- python 自动生成word文档,python实现的生成word文档功能示例
python实现的生成word文档功能示例 发布时间:2020-09-23 11:37:44 来源:脚本之家 阅读:108 作者:zhizunyu2009 本文实例讲述了python实现的生成word ...
- PHP 使用word模板生成word文档示例
<?php namespace Home\Controller; use PhpOffice\PhpWord\TemplateProcessor; use Think\Controller; c ...
最新文章
- 解决静态方法调用注入的service
- Linux中添加、修改、删除用户和用户组
- 收回扣、打麻将、开赌场?比亚迪自曝多名员工贪污腐败
- 第 26 章 职责链模式
- 深入浅出Python——Python高级语法之函数
- 步进式解读Apache许可证
- 电脑Win7系统桌面图标太大怎么调小
- 使用UUID生成32位ID
- 二建《机电》案例 100 问
- 关于数据分析的一些实例报告
- Winform开发框架之Office Ribbon界面
- elasticsearch使用脚本 滚动关闭索引,更新index setting
- Notification消息提醒
- 初学者入门:认识STM32单片机
- 第6-1课:A* 算法
- (小记)matlab导出模糊控制器中的surface viewer和隶属度曲线
- 以太坊联盟链-多节点私链搭建手册
- stm32的timer-trgo + DMA + DAC 播放WAV格式音乐
- python存储文件_Python的文件读写与存储
- 人工智能与医疗领域的融合发展