前言
沒有退路的時候,正是潛力發揮最大的時候。
一、合並單元格介紹
如下圖所示:
二、操作合並單元格
2.1 用之前xlrd普通的做法操作合並單元格試試
import xlrd
workbook = xlrd.open_workbook('./data/test_data.xlsx')
sheet = workbook.sheet_by_name('Sheet1')
cell_value = sheet.cell_value(1,0) # 獲取第二行第一個單元格內容
print( "01:" + str(cell_value) )
cell_value = sheet.cell_value(2,0) # 獲取第三行第一個單元格內容
print( "02:" + str(cell_value) )
cell_value = sheet.cell_value(3,0) # 獲取第四行第一個單元格內容
print( "03:" + str(cell_value) )
使用上述代碼,為的是打印三個已合並的單元格的值,結果如下:
01:學習python編程
02:
03:
此時會發現,合並單元格后會把數據放在合並單元格左上角第一個單元內,其它合並單元格的內容為空。如果是這樣讀取數據不太合理,最好是做到所有合並的單元格都能顯示單元格的值,即第三行、第四行都顯示 學習python編程
2.2 xlrd中的 merged_cells 屬性介紹
import xlrd
workbook = xlrd.open_workbook('./data/test_data.xlsx')
sheet = workbook.sheet_by_name('Sheet1')
# merged_cells 獲取當前表格所有合並單元格的位置信息 ,返回一個列表
print( sheet.merged_cells )
執行上述代碼的結果如下:
[(1, 5, 0, 1)]
merged_cells 返回的是一個列表,每一個元素是合並單元格的位置信息的數組,數組包含四個元素(起始行,結束行,起始列,結束列)
2.3 可以通過判斷的方式實現給合並單元格每一個都賦值
import xlrd
workbook = xlrd.open_workbook('./data/test_data.xlsx')
sheet = workbook.sheet_by_name('Sheet1')
# merged_cells 獲取當前表格所有合並單元格的位置信息 ,返回一個列表
merged = sheet.merged_cells
row_index = 3 ; col_index = 0
for (rlow, rhigh, clow, chigh) in merged: # 遍歷表格中所有合並單元格位置信息
if (row_index >= rlow and row_index < rhigh): # 行坐標判斷
if (col_index >= clow and col_index < chigh): # 列坐標判斷
# 如果滿足條件,就把合並單元格第一個位置的值賦給其它合並單元格
cell_value = sheet.cell_value(rlow,clow)
print( cell_value )
利用循環的方式去判斷要取值的單元格是否是合並單元格,如果是則把第一個位置的值賦給其它合並單元格,上述代碼只考慮合並單元格的情況。
三、小結
- 通過上述代碼,大家發現,需要用循環判斷的方式來處理合並單元格,xlrd並沒有默認處理好合並單元格;
- 上述代碼拋磚引玉,簡單的對合並單元格進行非常直接的處理,讀者們可以更進一步做成一個讀取excel數據的函數,不管是不是合並單元格都能完成數據讀取。