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 暂无 暂无 暂无

转载于:https://blog.51cto.com/12573822/2048820

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值