项目需要,需要自动生成PDF测试报告。经过对比之后,选择使用了reportlab模块。 项目背景:开发一个测试平台,供测试维护测试用例,执行测试用例,并且生成测试报告(包含PDF和excel),将生成的测试报告以邮件的形式发送相关人。

  excel生成代码如下:

from openpyxl import load_workbook
from openpyxl.styles import Font, Alignment, Side, Border
import shutil # 生成测试计划的excel文件
class GenerateCaseExcel(object):
def __init__(self, file_name):
self.file_name = file_name
self.file_path = '/xxx/xxx/xxx/'
self.font_title = Font(name=u"宋体", size=12, bold=True)
self.font_body = Font(name=u"宋体", size=10)
self.alignment_center = Alignment(horizontal='center', vertical='center', wrap_text=True)
self.alignment_left = Alignment(horizontal='left', vertical='center', wrap_text=True)
self.thin = Side(border_style="thin")
self.border = Border(top=self.thin, left=self.thin, right=self.thin, bottom=self.thin) def generateExcel(self, basic_data, case_set_list, case_data_info):
shutil.copy(u'/xxx/xxx/xxx/测试用例模板.xlsx', self.file_path + self.file_name + '.xlsx') wb = load_workbook(self.file_path + self.file_name + '.xlsx')
# 综合评估页面
ws_first = wb.worksheets[0]
ws_first.cell(2, 2).value = basic_data['project_name']
ws_first.cell(2, 4).value = basic_data['report_code']
ws_first.cell(2, 6).value = basic_data['report_date']
ws_first.cell(3, 2).value = basic_data['task_id']
ws_first.cell(3, 4).value = basic_data['task_name']
ws_first.cell(3, 6).value = basic_data['task_owner'] ws_first.cell(4, 2).value = basic_data['task_priority']
ws_first.cell(4, 4).value = basic_data['task_status']
ws_first.cell(4, 6).value = basic_data['task_module']
ws_first.cell(5, 2).value = basic_data['app_version']
ws_first.cell(5, 4).value = basic_data['product_id']
ws_first.cell(5, 6).value = basic_data['device_id'] ws_first.cell(6, 2).value = basic_data['firmware_key']
ws_first.cell(6, 4).value = basic_data['firmware_version']
ws_first.cell(6, 6).value = basic_data['mcu_version']
ws_first.cell(7, 2).value = basic_data['gateway_version']
ws_first.cell(7, 4).value = basic_data['chip_module'] ws_first.cell(8, 2).value = basic_data['task_result']
ws_first.cell(9, 2).value = basic_data['note']
ws_first.cell(10, 2).value = basic_data['router']
ws_first.cell(11, 2).value = basic_data['test_mobile'] for i in range(8, 12):
for j in range(2, 7):
ws_first.cell(i, j).border = self.border # 动态生成测试任务用例集信息
if len(case_set_list) > 0:
# 合并单元格处理
merge_num = int(11) + len(case_set_list)
ws_first.merge_cells("A12:A" + str(merge_num))
ws_first.cell(12, 1, value="测试流程")
ws_first.cell(12, 1).alignment = self.alignment_center
ws_first.cell(merge_num, 1).border = self.border for i in range(len(case_set_list)):
cur_row = int(12) + i
ws_first.cell(12 + i, 2, value="用例集名称")
ws_first.cell(12 + i, 2).alignment = self.alignment_center
ws_first.cell(12 + i, 2).border = self.border
ws_first.merge_cells("C" + str(cur_row) + ":D" + str(cur_row))
ws_first.cell(12 + i, 3, value=case_set_list[i]['set_name'])
ws_first.cell(12 + i, 3).alignment = self.alignment_center
ws_first.cell(12 + i, 3).border = self.border
ws_first.cell(12 + i, 4).border = self.border
ws_first.cell(12 + i, 5, value="用例负责人")
ws_first.cell(12 + i, 5).alignment = self.alignment_center
ws_first.cell(12 + i, 5).border = self.border
ws_first.cell(12 + i, 6, value=case_set_list[i]['set_owner'])
ws_first.cell(12 + i, 6).alignment = self.alignment_center
ws_first.cell(12 + i, 6).border = self.border # 测试用例集用例详细信息
fields = "case_id,case_module,case_priority,case_tags,case_name,case_step,expect_result,case_operator,real_result,note".split(",")
CASE_FIELD_LENGHT = 10
CASE_FIELD_DES = ["用例编号", "模块", "优先级", "标签", "标题", "测试步骤", "期望结果", "执行人", "实际结果", "备注"]
COLUMN_DES = {1: 'A', 2: 'B', 3: 'C', 4: 'D', 5: 'E', 6: 'F', 7: 'G', 8: 'H', 9: 'I', 10: 'J'}
if len(case_set_list) > 0:
for i in range(len(case_set_list)):
# title需要是unicode类型
ws_name = wb.create_sheet(title=case_set_list[i]['set_name'])
# 用例第一行初始化
for j in range(CASE_FIELD_LENGHT):
ws_name.cell(1, j + 1, value=CASE_FIELD_DES[j])
if j == 3 or j == 4 or j == 5 or j == 6 or j == 9:
ws_name.column_dimensions[COLUMN_DES[j + 1]].width = 35
else:
ws_name.column_dimensions[COLUMN_DES[j + 1]].width = 10
ws_name.cell(1, j + 1).font = self.font_title
ws_name.cell(1, j + 1).alignment = self.alignment_center
ws_name.cell(1, j + 1).border = self.border
ws_name.row_dimensions[1].height = 30
if case_set_list[i]['set_name'] in case_data_info.keys() and len(case_data_info[case_set_list[i]['set_name']]) > 0:
self.generateTableData(ws_name, case_data_info[case_set_list[i]['set_name']], fields) wb.save(filename=self.file_path + self.file_name + '.xlsx')
wb.close() # 生成table规则数据
def generateTableData(self, sheet_name, data_list, fields):
row_index = 2
for data in data_list:
col_index = 1
for title in fields:
sheet_name.cell(row=row_index, column=col_index, value=data[title])
sheet_name.cell(row=row_index, column=col_index).border = self.border
sheet_name.cell(row=row_index, column=col_index).font = self.font_body
sheet_name.row_dimensions[row_index].height = 25
if col_index == 5 or col_index == 6 or col_index == 7 or col_index == 10:
sheet_name.cell(row=row_index, column=col_index).alignment = self.alignment_left
else:
sheet_name.cell(row=row_index, column=col_index).alignment = self.alignment_center
col_index += 1
row_index += 1

  生成效果:

  

python之openpyxl生成excel文件的更多相关文章

  1. Python使用openpyxl读写excel文件

    Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...

  2. 【转发】Python使用openpyxl读写excel文件

    Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...

  3. python xlwt模块生成excel文件并写入数据 xlrd读取数据

    python中一般使用 xlwt (excel write)来生成Excel文件(可以控制单元格格式),用 xlrd 来读取Excel文件,用xlrd读取excel是不能对其进行操作的. 1.xlrd ...

  4. python 模块openpyxl读excel文件

    使用openpyxl模块来读取excel.要注意openpyxl读不再支持旧的xls格式. 先看一下操作前的excel是什么样子吧.对了,现在只支持xlsx格式的excel读取 我现在想在第三行插入3 ...

  5. 使用python在WEB页面上生成EXCEL文件

    来自:http://blog.sina.com.cn/s/blog_5d18f85f0101bxo7.html 近日写的一个程序需要在WEB服务器上生成EXCEL文件供用户下载,研究了一下找到了以下比 ...

  6. 如何生成excel文件作为图像识别结果

    如何生成excel文件作为图像识别结果 在进行大规模图像处理的时候,如果能够以表格的形式生成结果文件,将非常的直观.这个时候,选择excel作为结果输出文件,将是合适的. 查询相关资料,有很多关于ex ...

  7. php生成excel文件的简单方法

    生成excel文件,最简单的莫过于把数据库的数据导入到excel就行了. 生成excel 当然使用的是 phpExcel http://www.jbxue.com/tags/phpexcel.html ...

  8. XLSTransformer生成excel文件简单演示样例

    项目结构图: 项目中所用到的jar,能够到http://www.findjar.com/index.x下载 ExcelUtil类源代码: package util; import java.io.IO ...

  9. XLSTransformer生成excel文件

    jxls的使用方法: 1)声明一个XLSTransformer对象,生成方式就是使用new操作符                 XLSTransformer transformer = new XL ...

随机推荐

  1. 14Filter&Listener

    1.Filter:过滤器 1.1 概念 生活中的过滤器:净水器,空气净化器,土匪. web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能. 过滤器的作用: 一般用于完成 ...

  2. 代码审计-DVWA-命令注入

    首先说明,我水平不高,这是我在学习代码审计过程中写的记录笔记,难免有不正之处,还望指出. Windows 10 php7.2.10 + apache DVWA代码审计 命令执行 low <?ph ...

  3. jdk8流list转Map

    /** * */ package com.chuanglan.demo; import java.util.ArrayList; import java.util.Arrays; import jav ...

  4. ORACLE获取BOM清单

    BOM 结构如图 -- 1DH142-022 (DRIVE) -- 100729421  (PCBA) -- 100764148  (HDA) -- 100687050 (VCM) -- 100701 ...

  5. C# 获取应用程序几种方式的区别

    // 获取程序的基目录.System.AppDomain.CurrentDomain.BaseDirectory        这种方式 无论什么权限  获取的也只是应用程序的启动路径 // 获取模块 ...

  6. 格子游戏x(并查集)

    格子游戏 [问题描述] Alice和Bob玩了一个古老的游戏:首先画一个n * n的点阵(下图n = 3) 接着,他们两个轮流在相邻的点之间画上红边和蓝边:           直到围成一个封闭的圈( ...

  7. HGOI20190811 省常中互测4

    Problem A magic 给出一个字符串$S$,和数字$n$,要求构造长度为$n$只含有小写字母的字符串$T$, 使得在$T$中存在删除且仅删除一个子串使得$S=T$成立. 输出$T$的构造方案 ...

  8. MySQL数据库入门———常用基础命令

    mysql 连接数据库命令: MySQL 连接本地数据库,用户名为“root”,密码“123”(注意:“-p”和“123” 之间不能有空格) mysql -h localhost -u root -p ...

  9. [LOJ3046][ZJOI2019]语言:树链的并+线段树合并

    分析 问题显然可以转化为对于每个节点询问所有这个节点的所有链的链并的大小. 考场上我直接通过树剖打标记+树剖线段树维护以\(O(n \log^3 n)\)的时间复杂度暴力实现了这个过程.(使用LCT或 ...

  10. 11.Python变量及其使用

    无论使用什么语言编程,其最终目的都是对数据进行处理.程序在编程过程中,为了处理数据更加方便,通常会将其存储在变量中. 形象地看,变量就像一个个小容器,用于“盛装”程序中的数据.除了变量,还有常量,它也 ...