python基于openpyxl生成excel文件


Posted in Python onDecember 23, 2020

项目需要,需要自动生成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文件的详细内容,更多关于python 生成excel文件的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
疯狂上涨的Python 开发者应从2.x还是3.x着手?
Nov 16 Python
Python搜索引擎实现原理和方法
Nov 27 Python
python3.x实现发送邮件功能
May 22 Python
在PyCharm中批量查找及替换的方法
Jan 20 Python
pandas数据集的端到端处理
Feb 18 Python
python3利用Socket实现通信的方法示例
May 06 Python
python实现基于朴素贝叶斯的垃圾分类算法
Jul 09 Python
Python计算不规则图形面积算法实现解析
Nov 22 Python
pytorch 状态字典:state_dict使用详解
Jan 17 Python
tensorflow生成多个tfrecord文件实例
Feb 17 Python
浅谈django 模型类使用save()方法的好处与注意事项
Mar 28 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
Sep 03 Python
Python+unittest+requests+excel实现接口自动化测试框架
Dec 23 #Python
用python计算文件的MD5值
Dec 23 #Python
python中lower函数实现方法及用法讲解
Dec 23 #Python
Python类型转换的魔术方法详解
Dec 23 #Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
Dec 23 #Python
python音频处理的示例详解
Dec 23 #Python
python 实现客户端与服务端的通信
Dec 23 #Python
You might like
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
让Laravel API永远返回JSON格式响应的方法示例
2018/09/05 PHP
javascript function、指针及内置对象
2009/02/19 Javascript
javascript中强制执行toString()具体实现
2013/04/27 Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
2013/08/29 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
JavaScript中reduce()方法的使用详解
2015/06/09 Javascript
jQuery中选择器的基础使用教程
2016/05/23 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
JS逻辑运算符短路操作实例分析
2018/07/09 Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
关于AngularJS中几种Providers的区别总结
2020/05/17 Javascript
解决Antd 里面的select 选择框联动触发的问题
2020/10/24 Javascript
pyspark操作MongoDB的方法步骤
2019/01/04 Python
python下载的库包存放路径
2020/07/27 Python
python实现磁盘日志清理的示例
2020/11/05 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
匡威英国官网:Converse英国
2018/12/02 全球购物
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
法警的竞聘演讲稿
2014/01/02 职场文书
《跟踪台风的卫星》教学反思
2014/04/10 职场文书
公共场所禁烟倡议书
2014/08/30 职场文书
用人单位终止解除劳动合同证明书
2014/10/06 职场文书
2014年纠风工作总结
2014/12/08 职场文书
董事长岗位职责
2015/02/13 职场文书
2015年大学教师工作总结
2015/05/20 职场文书
羊脂球读书笔记
2015/06/30 职场文书
会议室使用管理制度
2015/08/06 职场文书
给学校的建议书400字
2015/09/14 职场文书
PyCharm 安装与使用配置教程(windows,mac通用)
2021/05/12 Python