日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

python基于openpyxl生成excel文件

瀏覽:29日期:2022-07-01 13:20:09

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

excel生成代碼如下:

from openpyxl import load_workbookfrom openpyxl.styles import Font, Alignment, Side, Borderimport 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) + iws_first.cell(12 + i, 2, value='用例集名稱')ws_first.cell(12 + i, 2).alignment = self.alignment_centerws_first.cell(12 + i, 2).border = self.borderws_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_centerws_first.cell(12 + i, 3).border = self.borderws_first.cell(12 + i, 4).border = self.borderws_first.cell(12 + i, 5, value='用例負責(zé)人')ws_first.cell(12 + i, 5).alignment = self.alignment_centerws_first.cell(12 + i, 5).border = self.borderws_first.cell(12 + i, 6, value=case_set_list[i][’set_owner’])ws_first.cell(12 + i, 6).alignment = self.alignment_centerws_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 = 30if 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.bordersheet_name.cell(row=row_index, column=col_index).font = self.font_bodysheet_name.row_dimensions[row_index].height = 25if 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_leftelse: sheet_name.cell(row=row_index, column=col_index).alignment = self.alignment_centercol_index += 1 row_index += 1

生成效果:

python基于openpyxl生成excel文件

python基于openpyxl生成excel文件

以上就是python基于openpyxl生成excel文件的詳細內(nèi)容,更多關(guān)于python 生成excel文件的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: python
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久精品人人| 欧美精品二区| 久久这里只有| 国产美女精品视频免费播放软件| 中文字幕成人| 视频在线在亚洲| 日韩欧美少妇| 极品av在线| 久久精品动漫| 99久久婷婷这里只有精品| 日韩免费一区| 久久在线视频免费观看| 亚洲精品一区二区在线看| 国产真实久久| 欧美国产91| 亚洲一区二区三区四区五区午夜 | 999国产精品永久免费视频app| 色偷偷色偷偷色偷偷在线视频| 99精品综合| 免播放器亚洲| 91精品日本| 国产精品2023| 国产亚洲一区二区手机在线观看| 国产精品av一区二区| 另类激情亚洲| 91成人精品在线| 久久亚洲精品中文字幕| 国产盗摄——sm在线视频| 欧美日韩黑人| 免费人成网站在线观看欧美高清| 91亚洲无吗| 欧美激情aⅴ一区二区三区| 国产精品毛片久久| 在线视频免费在线观看一区二区| 深夜福利一区| 加勒比视频一区| 不卡视频在线| 日本午夜免费一区二区 | 精品一区电影| 欧美成a人片免费观看久久五月天| 精品少妇一区| 麻豆视频在线观看免费网站黄| 国产成人精品一区二区三区视频| 国产中文在线播放| 美日韩一区二区三区| 日韩av专区| 亚洲成人二区| 水野朝阳av一区二区三区| 国产欧美久久一区二区三区| 日本综合字幕| 日本成人手机在线| 中文在线а√天堂| 亚洲尤物av| 国产在线一区不卡| 99国产精品视频免费观看一公开| 国产亚洲精品精品国产亚洲综合| 欧美激情久久久久久久久久久| 欧美三级网址| 成人av二区| 一区二区三区四区在线看| 午夜在线视频一区二区区别| 日韩精品一区二区三区av| 美女久久99| 97精品一区| 日韩1区2区3区| 久久精品国产99国产精品| 精品高清久久| 日韩影院在线观看| 久久夜夜操妹子| 国产精品亚洲综合久久| 欧美亚洲激情| 欧美精品99| 日韩专区一卡二卡| 成人精品高清在线视频| 肉色欧美久久久久久久免费看| 国产一区二区三区亚洲| 欧美日韩国产欧| 日韩av成人高清| 日本国产精品| 日韩综合小视频| 香蕉成人av| 欧美精品中文| 国产亚洲毛片| 久久影院一区| 久久gogo国模啪啪裸体| 涩涩涩久久久成人精品| 国产亚洲永久域名| 秋霞影院一区二区三区| 福利一区视频| 亚洲丝袜美腿一区| 欧美 日韩 国产精品免费观看| 久久久久九九精品影院| aa亚洲婷婷| 久久久久一区| 日韩成人精品一区二区| 国产三级精品三级在线观看国产| 一本色道精品久久一区二区三区| 97精品一区二区| 亚洲综合福利| 欧美日韩视频| 国产精品99久久精品| 欧美日韩 国产精品| 精品一区毛片| 狠狠操综合网| 国产精品蜜芽在线观看| 久久一区国产| 久久中文字幕一区二区三区| 日韩avvvv在线播放| 午夜日本精品| 精品免费视频| 日韩高清不卡在线| 婷婷激情综合| 激情综合网五月| 91亚洲国产成人久久精品| 日本aⅴ亚洲精品中文乱码| 蜜桃免费网站一区二区三区| 午夜亚洲精品| 国产一区日韩一区| 日韩中文在线播放| 国产欧美日韩影院| 日本一区二区中文字幕| 日本少妇精品亚洲第一区| 亚洲精品乱码久久久久久蜜桃麻豆| 99成人在线| 日本午夜大片a在线观看| 欧美精品国产| 久久三级福利| 中文在线免费视频| 日韩av网站在线观看| 亚洲欧洲美洲国产香蕉| 国产精品丝袜xxxxxxx| 欧美 日韩 国产一区二区在线视频| 亚洲电影有码| 欧美成人精品| 久久婷婷国产| 不卡一二三区| 一区二区三区四区在线看| 久久精品成人| 中文在线一区| 日本一区免费网站| 国产精品任我爽爆在线播放| 国产极品模特精品一二| 日韩综合在线| 欧美日韩高清| 综合国产视频| 国产欧美在线| 精品久久中文| 麻豆视频在线看| 久久一区二区三区电影| 欧美色图一区| 蜜臀久久99精品久久久久宅男| 日韩欧美四区| 麻豆精品久久| 神马日本精品| 久久都是精品| 日本精品在线播放| 美女视频黄久久| 美女亚洲一区| 亚洲综合色婷婷在线观看| 国产极品一区| 欧美在线观看视频一区| 婷婷精品在线| 精品不卡一区| 蜜桃久久av| 久久av中文| 欧美日韩一区二区综合| 亚洲一二三区视频| 国产精品成人a在线观看| 日韩一级不卡| 欧美国产极品| 久久伦理在线| 欧美日本一区| 久久国产欧美| 欧美三级第一页| 久久久久蜜桃| 日韩av不卡一区二区| 四虎4545www国产精品 | 精品欧美视频| 久久99伊人| 国产精品久久观看| 蜜桃久久av一区| 中文字幕人成乱码在线观看| 中文字幕成人| 欧美三级网址| 日本va欧美va欧美va精品| 成人看片网站| 国产欧美91| 伊人精品视频| 麻豆中文一区二区| 亚洲自拍另类| 国产在线观看91一区二区三区| 国产在线日韩| 欧美成人精品一级| 亚洲中午字幕| 91日韩欧美| 欧美久久亚洲| 免费日韩av片| 欧美好骚综合网| 欧美在线精品一区| 黑丝一区二区三区|