Python CookBook之xlrd:讀取合併單元格及日期格式內容

在自動化測試過程中,將測試數據放在excel中形成數據驅動測試框架不失爲一個選擇,xlrd在讀取合併單元格時,認爲合併後的單元格的首格有值,其餘格均爲空,所以需要經過處理,在處理過程中考慮到假如又存在本身單元格內容就是空值的情況,所以需要計算合併的單元格的範圍,在網上經過一番查找,發現了大牛的方法,所以分享下完整的代碼:

數據樣式在網上比較常見,包括了行合併和列合併
Python CookBook之xlrd:讀取合併單元格及日期格式內容

# -*- coding:utf-8 -*-
import xlrd
from datetime import date

# 注意在讀取時要添加formatting_info=True參數,默認是False,表示原樣讀取
wb = xlrd.open_workbook('MergeCell.xls', formatting_info=True)
table = wb.sheet_by_name('Sheet1')

# 計算出合併的單元格有哪些
colspan = {}     # 用於保存計算出的合併的單元格,key=(7, 4)合併單元格座標,value=(7, 2)合併單元格首格座標
# table.merged_cells是一個元組的集合,每個元組由4個數字構成(7,8,2,5)
# 四個數字依次代表:行,合併的範圍(不包含),列,合併的範圍(不包含),類似range(),從0開始計算
# (7,8,2,5)的意思是第7行的2,3,4列進行了合併
print 'table.merged_cells:' + str(table.merged_cells)
if table.merged_cells:
    for item in table.merged_cells:
        # print 'item: ' + str(item)
        # 通過循環進行組合,從而得出所有的合併單元格的座標
        for row in range(item[0], item[1]):
            for col in range(item[2], item[3]):
                # 合併單元格的首格是有值的,所以在這裏進行了去重
                if (row, col) != (item[0], item[2]):
                    colspan.update({(row, col): (item[0], item[2])})
print colspan

# 開始循環讀取excel中的每一行的數據
for i in range(table.nrows):
    for j in range(table.ncols):
        # 假如碰見合併的單元格座標,取合併的首格的值即可
        if colspan.get((i, j)):
            print table.cell_value(*colspan.get((i, j))),
        else:
            # 對excel中的日期格式進行
            if table.cell(i, j).ctype == 3:
                date_value = xlrd.xldate_as_tuple(table.cell_value(i, j), wb.datemode)
                date_tmp = date(*date_value[:3]).strftime('%Y/%m/%d')
                print date_tmp,
            else:
                print table.cell_value(i, j),
    print '\n'**

運行結果如下:
table.merged_cells:[(7, 8, 2, 5), (1, 3, 4, 5), (3, 6, 4, 5)]
{(7, 4): (7, 2), (7, 3): (7, 2), (5, 4): (3, 4), (4, 4): (3, 4), (2, 4): (1, 4)}
姓名 年齡 出生日期 愛好 關係

小杰 24.0 1991/11/11 打人 好朋友

小胖 24.0 1990/02/22 彈吉他 好朋友

小明 26.0 1989/12/12 打遊戲 同學

大神 26.0 1989/09/09 打遊戲 同學

大仙 27.0 1988/08/08 打遊戲 同學

小敏 25.0 1990/10/10 工作 一個人

無名 20.0 暫無 暫無 暫無

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章