python 读取合并单元格_Python CookBook之xlrd:读取合并单元格及日期格式内容

在自动化测试过程中,将测试数据放在excel中形成数据驱动测试框架不失为一个选择,xlrd在读取合并单元格时,认为合并后的单元格的首格有值,其余格均为空,所以需要经过处理,在处理过程中考虑到假如又存在本身单元格内容就是空值的情况,所以需要计算合并的单元格的范围,在网上经过一番查找,发现了大牛的方法,所以分享下完整的代码:

数据样式在网上比较常见,包括了行合并和列合并

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值