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

  生成效果:

  

原文地址:https://www.cnblogs.com/zoe-yan/p/11356542.html

时间: 2024-10-04 04:33:23

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

python读取和生成excel文件

今天来看一下如何使用python处理excel文件,处理excel文件是在工作中经常用到的,python为我们考虑到了这一点,python中本身就自带csv模块. 1.用python读取csv文件: csv是逗号分隔符格式 一般我们用的execl生成的格式是xls和xlsx  直接重命名为csv的话会报错: Error: line contains NULL byte insun解决方案:出错原因是直接是把后缀为xls的execl文件重命名为csv的 正常的要是另存为csv文件 就不会报错了 譬

python 模块openpyxl读excel文件

使用openpyxl模块来读取excel. 先看一下操作前的excel是什么样子吧.对了,现在只支持xlsx格式的excel读取 我现在想在第三行插入3,3,3怎么办呢? #!/usr/bin/env python # _*_ coding:utf-8 _*_ # 导入excel读取模块 from openpyxl import load_workbook from openpyxl.cell import get_column_letter # 将excel文件加载到内存对象中 wb = lo

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

来自:http://blog.sina.com.cn/s/blog_5d18f85f0101bxo7.html 近日写的一个程序需要在WEB服务器上生成EXCEL文件供用户下载,研究了一下找到了以下比较可行的实现方案,下面以web.py为例,把相关代码贴出来供大家参考: 首先需要下载生成EXCEL的模块,推荐使用xlwt import xlwt import StringIO import web urls = ( '/rim_request','rim_request', '/rim_expo

Java生成Excel文件

1.设计源码 /** * * @title:ExcelUtils.java * @Package:com.you.utils * @Description:<h3>一句话描述功能</h3> * @author:游海东 * @date:2015-3-21下午10:17:34 * @version V1.0 * */ package com.you.utils; import java.io.File; import java.io.IOException; import jxl.Wo

HSSFWorkbook生成excel文件

1.使用org.apache.poi.hssf.usermodel.HSSFWorkbook生成excel文件,HSSFWorkBook的构造法方法很多,可以直接通过new关键字创建一个WorkBook即对应一个excel文件,更多构造方法请参阅:http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFWorkbook.html 2.excel具体创建过程 //创建一个excel HSSFWorkbook wb = new

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

项目结构图: 项目中所用到的jar,能够到http://www.findjar.com/index.x下载 ExcelUtil类源代码: package util; import java.io.IOException; import java.net.URL; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.jxls.exception.ParsePropertyExcep

实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件

今天接到项目中的一个功能,要实现excel的导入,导出功能.这个看起来思路比较清楚,但是做起了就遇到了不少问题. 不过核心的问题,大家也不会遇到了.每个项目前台页面,以及数据填充方式都不一样,不过大多都是以json数据填充的.在导入excel填充json数据到页面时,真的让我差点吐血了.在做这个导入导出的时候,那一个礼拜都是黑暗的. 好了,废话不多说了,我今天就给大家展示这个两个功能的核心点,excel生成json数据和json数据生成excel文件. 一:从上传文件到服务器,后台java解析,

thinkphp整合系列之phpexcel生成生成excel文件

在后台管理中会经常需要将数据生成excel表格的: php生成excel有两种方案: 一种是通过phpexcel生成xls格式的表格文件: 另一种则直接通过逗号换行生成csv格式的表格文件: 这里先讲解thinkphp整合phpexcel的过程: 示例项目:http://git.oschina.net/shuaibai123/thinkphp-bjyadmin 一:导入phpexcel /ThinkPHP/Library/Vendor/PHPExcel 二:生成excel的函数 /** * 数组

好记性不如烂笔头7-JAVA生成EXCEL文件

使用poi生成EXCEL 在很多的场合,需要使用EXCEL文件.一般是表格方面的应用,简单的示例. 需要引入第三方jar包:poi_3.6.jar package com.daily; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; importorg.apache.poi.hs