關於xlrd處理合併單元格

2022-05-15 06:27:15 字數 1689 閱讀 7190

先埋個雷, 最近在做通過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()

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方法,可以獲取到所有合併的單元格~

像如圖的,g列2,3,4行都合併到了第2行,所以導致取3,4行資料的時候會取到"".

我這邊的case_info是每一行的資料,用的row_values()方法取出的資料。

相當於做了1次更新,merge_cell方法是用來獲取哪些單元格是被合併了的,並且找到他們合併到的那個單元格。(已知缺陷,第一行本身就能去到資料,我做了多餘的更新。)

merged是呼叫merge_cell()方法後返回的1個dict,裡面存放了key: 被合併的單元格位址, value: 合併到的單元格位址。

這樣就解決了同乙個介面, 多引數的問題~

Python基於xlrd模組處理合併單元格

更多程式設計教程請到 菜鳥教程 目的 python能使用xlrd模組實現對excel資料的讀取,且按照想要的輸出形式。總體思路 1 要想實現對excel資料的讀取,需要用到第三方應用,直接應用。2 實際操作時候和我們實際平時開啟乙個檔案進行操作一樣,先找到檔案 開啟檔案 定義要讀取的sheet 讀取...

合併單元格

青年 老大,最近在 中合併單元格,總是不明就裡,好像是合併對了,有時也是蒙的,您能不能就此指條明路?禪師 這個問題很簡單,合併單元格分為跨行合併和跨列合併,這是標籤的rowspan和colspan屬性問題,已知3x3 禪師 首先說說跨行合併rowspan,由於我們書寫 的習慣是標籤包裹便簽,因此書寫...

單元格合併??

單元格合併著實讓人為難!使用的dev 的gridcontrol控制項,實現資料繫結很方便,但是在網上查怎麼都沒有找到如何實現單元格的合併。所以只好作罷。然後計畫採用flexcell,但是是付費的。使用了一下和excel差類似,實現的樣式也很豐富。可以滿足報表顯示的要求,但是要是能自己使用datagr...