python之excel的封裝


python之excel的封裝

將所有excel的操作都使用面向對象的思維進行封裝,即將所有操作都放入一個類中即為封裝。

它將excel的處理極大程度的進行了簡化操作

封裝前需要先處理的操作:

1.在本地電腦新建一excel表格,將用例寫入表中,可不寫實際結果/最終結果,將表復制到使用的python目錄下

且在excel封裝前請先完成excel中數據之間關系的腳本

例如:關於運算方面的,須要先寫好:

1>關於算術的加減乘除運算py文件

2>加/減/乘/除運算時的各自情況的py文件,如:會有兩個正數/負數/一正一負等

 

 

openpyxl可讀可寫,較靈活,最常用

xlrw/xlrd只有寫/讀,不常用

 

使用openpyxl對excel進行封裝:

 1 from openpyxl import load_workbook  # 調用對excel文件進行讀寫操作的模塊
 2 
 3 class HandleExcel():
 4     """
 5     定義excel類,處理excel中的數據
 6     """
7 def __init__(self,filename,sheetname=None): 8 self.filename = filename 9 self.sheetname = sheetname 10 def get_cases(self): 11 """ 12 獲取excel中的所有測試用例 13 :return: 14 """ 15 wb = load_workbook(self.filename) # 打開excel表 16 ws = wb[self.sheetname] # 打開excel中的表單 17 18 # 判斷表單是否只有一個 19 if self.sheetname is None: # 如果表單只有一個,那就選默認表單,若表單有若干個,否則就選擇指定的表單 20 ws = wb.active 21 else: 22 ws = wb[self.sheetname] 23 24 # 獲取表頭信息,結果為嵌套元組的元組,取出元組中第一個元素,即為表頭信息內容 25 head_date_tuple = tuple(ws.iter_rows(max_row=1,values_only= True))[0]
#表頭信息為當前表單的標題,在第一行,所以只需限制最大行為1即可 #values_only= True返回單元格的值,如果不加,返回的只是一個對象
26 # 獲取除表頭下面的用例信息 27 one_list=[] #指定一個空列表,后面存放每個用例行的內容 28 for one_tuple in tuple(ws.iter_rows(ws.iter_rows(min_row=2,values_only=True))): # 獲取所有用例存放在元組中,形成嵌套元組的元組,再將元組中的各個元素/每條用例通過for循環一個個取出 29 #從表單中的第二行算起全是用例內容,為了讓所有用例/可能會添加的用例全被執行,這里不限制最大行/最大列;最小列為1,即為默認值,可不寫; 30 one_list.append(dict(zip(head_date_tuple,one_tuple))) # 將用例標題與用例內容一一對應為一組,依次放在空列表中,形成嵌套字典的列表 31 return one_list # 返回列表,得到所有用例數據

 

 

獲取某一行的用例

    def get_case(self,row):
        """
        獲取指定行的用例
        :param row: 行號
        :return:
        """
        return self.get_cases()[row-1] # 行數-1,即為指定行的索引

 

在指定行寫入數據

    def write_data(self,row,actual,result):
        """
        在指定行寫入數據
        :param row: 行號
        :param actual: 實際結果
        :param result: 最終結果是否通過Fail/Pass
        :return:
        """
        #同一個workbook對象,如將多個數據寫入不同表單,則只有最后一個表單能寫入成功---這是openpyxl的特性,無法避免。
        #要寫入不同的表單,須重新再定義一個workbook對象
        other_wb=load_workbook(self.filename)
        if self.sheetname is None:
            other_ws = other_wb.active
        else:
            other_ws = other_wb[self.sheetname]
        if isinstance(row,int) and (2 <= row <=other_ws.max_row):   # 行號為整數,且行號為第2行以后的數據
            other_ws.cell(row=row,column=6,value=actual)
            other_ws.cell(row=row,column=7,value=result)
            other_wb.save(self.filename)    # 寫入成功后保存文件
            other_wb.close()   #openpyxl讀數據時不關閉,寫數據時可關閉也可不關閉
        else:                                                # 如果行號不是整數/小於2/大於最大行號了就會報錯
            print("傳入的行號有誤,請重新寫入")

 

對自己寫的腳本自測

if __name__ == '__main__':  # 自己先測試下上面寫的封裝類是否正確
    filename = "cases.xlsx"    # 定義一個filename,指定為cases.excel文件
    do_excel = HandleExcel(filename)  # 創建一個類,指定為filename文件名
    cases = do_excel.get_cases()  # 獲取所有用例
    case = do_excel.get_case(3)   # 獲取第三行用例
    do_excel.write_data(4,"99","其他") # 在第4行寫入數據
    pass

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM