關於xlrd處理合並單元格


先埋個雷, 最近在做通過excel讀取接口測試用例~
流程等都是自己制定的,打算做完了之后放到GitHub上去哈哈哈。


正式進入正題~

在寫這個框架的時候,遇到了一個問題,就是同一個接口,需要為他准備很多組參數,那么我該在excel里怎么處理呢,本身是想另起一行,但是又覺得同樣的內容過多,比如接口地址、name、id、headers等這些信息都肯定是一致的。那么我想到了,合並單元格!


但是新的問題又出現了,在我合並單元格以后,我逐行讀取用例的時候,發現,被合並的單元格讀取的結果是'',
這就很令人尷尬了。

但是不要緊

def merge_cell(sheet):
    rt = {}
    if sheet.merged_cells:
        # exists merged cell
        for item in sheet.merged_cells:
            for row in range(item[0], item[1]):
                for col in range(item[2], item[3]):
                    rt.update({(row, col): (item[0], item[2])})
    return rt

def get_merged(filename):
    # 這里本應該做filepath的判斷,但是我先省略了
    book = xlrd.open_workbook(filename)
    sheets = book.sheets()    # 所有sheets
    for index in range(len(sheets)):
        sheet = book.sheet_by_index(index)
        # 獲取合並的單元格
        merged = merge_cell(sheet)
        # 獲取sheet的行數(默認每一行就是一條用例)
        rows = sheet.nrows
        # 如果sheet為空,那么rows是0
        if rows:
            for row in range(rows):
                data = sheet.row_values(row)   # 單行數據
                for index, content in enumerate(data):
                    if merged.get((row, index)):
                        # 這是合並后的單元格,需要重新取一次數據
                        data[index] = sheet.cell_value(*merged.get((row, index)))

這樣每行的數據data, 就是正確的數據了!

xlrd里面有個merged_cells方法,可以獲取到所有合並的單元格~

image.png
像如圖的,G列2,3,4行都合並到了第2行,所以導致取3,4行數據的時候會取到"".
我這邊的case_info是每一行的數據,用的row_values()方法取出的數據。
相當於做了1次更新,merge_cell方法是用來獲取哪些單元格是被合並了的,並且找到他們合並到的那個單元格。(已知缺陷,第一行本身就能去到數據,我做了多余的更新。)

merged是調用merge_cell()方法后返回的1個dict,里面存放了key: 被合並的單元格地址, value: 合並到的單元格地址。
這樣就解決了同一個接口, 多參數的問題~


免責聲明!

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



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