欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python基于openpyxl生成excel文件

 更新時間:2020年12月23日 16:41:33   作者:Zoe_yan  
這篇文章主要介紹了python基于openpyxl生成excel文件的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下

  項目需要,需要自動生成PDF測試報告。經(jīng)過對比之后,選擇使用了reportlab模塊。 項目背景:開發(fā)一個測試平臺,供測試維護測試用例,執(zhí)行測試用例,并且生成測試報告(包含PDF和excel),將生成的測試報告以郵件的形式發(fā)送相關(guān)人。

  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

    # 動態(tài)生成測試任務(wù)用例集信息
    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="用例負責(zé)人")
        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 = ["用例編號", "模塊", "優(yōu)先級", "標簽", "標題", "測試步驟", "期望結(jié)果", "執(zhí)行人", "實際結(jié)果", "備注"]
    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規(guī)則數(shù)據(jù)
  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文件的詳細內(nèi)容,更多關(guān)于python 生成excel文件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python matplotlib如何刪除subplots中多余的空白子圖

    Python matplotlib如何刪除subplots中多余的空白子圖

    這篇文章主要介紹了Python matplotlib如何刪除subplots中多余的空白子圖問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • python flask中動態(tài)URL規(guī)則詳解

    python flask中動態(tài)URL規(guī)則詳解

    今天小編就為大家分享一篇python flask中動態(tài)URL規(guī)則詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • python 實現(xiàn)視頻流下載保存MP4的方法

    python 實現(xiàn)視頻流下載保存MP4的方法

    今天小編就為大家分享一篇python 實現(xiàn)視頻流下載保存MP4的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • pytorch中部分矩陣乘法和數(shù)組乘法的小結(jié)

    pytorch中部分矩陣乘法和數(shù)組乘法的小結(jié)

    本文主要介紹了pytorch中部分矩陣乘法和數(shù)組乘法的小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python函數(shù)的定義與調(diào)用方法實例

    Python函數(shù)的定義與調(diào)用方法實例

    Python 中函數(shù)的應(yīng)用非常廣泛,函數(shù)是組織好的,可重復(fù)使用的,用來實現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段,這篇文章主要給大家介紹了關(guān)于Python函數(shù)的定義與調(diào)用的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • 詳解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和區(qū)別

    詳解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和區(qū)別

    這篇文章主要介紹了詳解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Python-Selenium自動化爬蟲

    Python-Selenium自動化爬蟲

    本文介紹Python-Selenium自動化爬蟲,Selenium是一個Web的自動化測試工具,最初是為網(wǎng)站自動化測試而開發(fā)的,Selenium?可以直接運行在瀏覽器上,它支持所有主流的瀏覽器,可以接收指令,讓瀏覽器自動加載頁面,獲取需要的數(shù)據(jù),甚至頁面截屏,xiamian?neir?需要的朋友可以參考下
    2022-01-01
  • python3利用venv配置虛擬環(huán)境及過程中的小問題小結(jié)

    python3利用venv配置虛擬環(huán)境及過程中的小問題小結(jié)

    這篇文章主要介紹了python3利用venv配置虛擬環(huán)境及過程中的小問題小結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • python多線程分塊讀取文件

    python多線程分塊讀取文件

    這篇文章主要為大家詳細介紹了python多線程分塊讀取文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • python3中rsa加密算法詳情

    python3中rsa加密算法詳情

    這篇文章主要介紹了python3中rsa加密算法詳情,rsa加密,是一種加密算法,目前而言,加密算法,是對數(shù)據(jù)、密碼等進行加密,下文更多相關(guān)介紹,需要的小伙伴可以參考一下
    2022-05-05

最新評論