python之openpyxl生成excel文件
项目需要,需要自动生成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文件的更多相关文章
- Python使用openpyxl读写excel文件
Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...
- 【转发】Python使用openpyxl读写excel文件
Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...
- python xlwt模块生成excel文件并写入数据 xlrd读取数据
python中一般使用 xlwt (excel write)来生成Excel文件(可以控制单元格格式),用 xlrd 来读取Excel文件,用xlrd读取excel是不能对其进行操作的. 1.xlrd ...
- python 模块openpyxl读excel文件
使用openpyxl模块来读取excel.要注意openpyxl读不再支持旧的xls格式. 先看一下操作前的excel是什么样子吧.对了,现在只支持xlsx格式的excel读取 我现在想在第三行插入3 ...
- 使用python在WEB页面上生成EXCEL文件
来自:http://blog.sina.com.cn/s/blog_5d18f85f0101bxo7.html 近日写的一个程序需要在WEB服务器上生成EXCEL文件供用户下载,研究了一下找到了以下比 ...
- 如何生成excel文件作为图像识别结果
如何生成excel文件作为图像识别结果 在进行大规模图像处理的时候,如果能够以表格的形式生成结果文件,将非常的直观.这个时候,选择excel作为结果输出文件,将是合适的. 查询相关资料,有很多关于ex ...
- php生成excel文件的简单方法
生成excel文件,最简单的莫过于把数据库的数据导入到excel就行了. 生成excel 当然使用的是 phpExcel http://www.jbxue.com/tags/phpexcel.html ...
- XLSTransformer生成excel文件简单演示样例
项目结构图: 项目中所用到的jar,能够到http://www.findjar.com/index.x下载 ExcelUtil类源代码: package util; import java.io.IO ...
- XLSTransformer生成excel文件
jxls的使用方法: 1)声明一个XLSTransformer对象,生成方式就是使用new操作符 XLSTransformer transformer = new XL ...
随机推荐
- -bash: ./centos-7.6.sh: /bin/bash^M: bad interpreter问题解决
在windows下保存了一个脚本文件,用ssh上传到centos,添加权限执行nginx提示没有那个文件或目录.shell脚本放到/etc/init.d/目录下,再执行/etc/init.d/ngin ...
- maven 学习之路之二(1)
上次我简单讲了maven的安装和构建生命周期. 这一篇博客我将用实际项目来分享下maven整个构建生命周期的具体使用: 这次我将用maven做一个自己写程序的一个模版程序. 自己实现一个简单的页面登录 ...
- django 自带认证系统(login,logout,authenticate,login_required)
from django.contrib.auth import login,authenticate,logoutfrom django.contrib.auth.decorators import ...
- Django学习系列12:把Python变量传入模板中渲染
从视图的Python代码中把变量传入HTML模板. 模板中使用哪种句法引入Python对象,要使用的符号{{...}},它会以字符串的形式显示对象: <html> <head> ...
- oracle 环境变量问题
ORACLE_HOME 配置为oracle ..\dbhome_1 配置错误可能导致监听起不来 (也有可能是在装client时可能会更改了之前变量的值) TNS_ADMIN ...
- The Preliminary Contest for ICPC Asia Nanchang 2019 E. Magic Master
题目:https://nanti.jisuanke.com/t/41352 思路:约瑟夫环 由题意得第k张牌即求 k 为 第几个 报数为m+1 的单位 用队列模拟即可 #include<bits ...
- 【洛谷P2147】洞穴勘测
题目大意:维护 N 个点的无向图,支持动态加边和删边,回答两点的连通性. 题解:线段树分治 + 可撤销并查集 询问可以离线,这是线段树分治的基础. 建立在操作时间轴上的线段树称为线段树分治算法. 本题 ...
- 【GitHub】命令行操作
提交文件 本地修改之后:git add . 提交到暂存区 commit一下:git commit -m "xxx" -m表示信息,不填无法commit 提交到远程仓库: ...
- qt5--QEvent事件
QEvent事件是负责事件分发,包括所有事件返回值为true,用户自己处理事件,不向下分发:false系统处理事件---必须有返回值 查看所有事件,在Qt助手中搜索QEvent::Type #incl ...
- 【SQL-不重复插入】一条语句实现,插入不重复的记录到数据库
Insert新纪录时,先查询SQL数据库中是否存在相同记录,如果存在,则不插入. if not exists(select count(*) from [Admin] where Name='adm ...