博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于xlrd处理合并单元格
阅读量:6606 次
发布时间:2019-06-24

本文共 1572 字,大约阅读时间需要 5 分钟。

先埋个雷, 最近在做通过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({(row, col): (item[0], item[2])})    return rtdef 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方法,可以获取到所有合并的单元格~

image.png

像如图的,G列2,3,4行都合并到了第2行,所以导致取3,4行数据的时候会取到"".
我这边的case_info是每一行的数据,用的row_values()方法取出的数据。
相当于做了1次更新,merge_cell方法是用来获取哪些单元格是被合并了的,并且找到他们合并到的那个单元格。(已知缺陷,第一行本身就能去到数据,我做了多余的更新。)

merged是调用merge_cell()方法后返回的1个dict,里面存放了key: 被合并的单元格地址, value: 合并到的单元格地址。

这样就解决了同一个接口, 多参数的问题~

转载地址:http://libso.baihongyu.com/

你可能感兴趣的文章
【BZOJ 1901】Dynamic Rankings
查看>>
阿里架构师都在学的知识体系
查看>>
哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-高年级组)C - 小明打联盟...
查看>>
POJ 1930 Dead Fraction
查看>>
PAT (Advanced Level) 1028. List Sorting (25)
查看>>
【摘】人生苦短, 每日python
查看>>
隐藏input的光标
查看>>
【转】聚集索引和非聚集索引的区别
查看>>
[C++知识点]2015.4.18
查看>>
第五次作业
查看>>
【转】mac os 安装php
查看>>
Android -- OkHttp的简单使用和封装
查看>>
软件工程_第二次作业
查看>>
C# DllImport的用法
查看>>
C#单例模式
查看>>
Bitmap处理之创建可自动回收资源的ImageView
查看>>
ERP框架序设计与开发日记(下)
查看>>
Github-Client(ANDROID)开源之旅(二) ------ 浅析ActionBarSherkLock
查看>>
no identities are available for signing
查看>>
为什么匿名内部类参数必须为final类型
查看>>