关于xlrd处理合并单元格
先埋个雷, 最近在做通过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 rt
def 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方法,可以获取到所有合并的单元格~

像如图的,G列2,3,4行都合并到了第2行,所以导致取3,4行数据的时候会取到"".
我这边的case_info是每一行的数据,用的row_values()方法取出的数据。
相当于做了1次更新,merge_cell方法是用来获取哪些单元格是被合并了的,并且找到他们合并到的那个单元格。(已知缺陷,第一行本身就能去到数据,我做了多余的更新。)
merged是调用merge_cell()方法后返回的1个dict,里面存放了key: 被合并的单元格地址, value: 合并到的单元格地址。
这样就解决了同一个接口, 多参数的问题~
关于xlrd处理合并单元格的更多相关文章
- python 利用三方的xlrd模块读取excel文件,处理合并单元格
目的: python能使用xlrd模块实现对Excel数据的读取,且按照想要的输出形式. 总体思路: (1)要想实现对Excel数据的读取,需要用到第三方应用,直接应用. (2)实际操作时候和我 ...
- python-利用xlrd模块中读取有合并单元格的excel数据
前言 对于excel中有合并单元格的情况,合并的单元格只能取到第一个单元格的值,合并的单元格后面的单元格内容的值为空,针对这个情况,写了下面一段代码实现, 对单元格进行判断,如果是传入的索引是合并单元 ...
- python-Excel读取-合并单元格读取
python-Excel读取-合并单元格读取(后续会补充python-Excel写入的部分) 1. python读取Excel单元格 代码包含读取Excel中数据,以及出现横向合并单元格,以及竖向合并 ...
- C# 获取Excel中的合并单元格
C# 获取Excel中的合并单元格 我们在制作表格时,有时经常需要合并及取消合并一些单元格.在取消合并单元格时需要逐个查找及取消,比较麻烦.这里分享一个简单的方法来识别Excel中的合并单元格,识别这 ...
- jquery操作表格 合并单元格
jquery操作table,合并单元格,合并相同的行 合并的方法 $("#tableid").mergeCell({ cols:[X,X] ///参数为要合并的列}) /** * ...
- NPOI操作EXCEL(五)——含合并单元格复杂表头的EXCEL解析
我们在第三篇文章中谈到了那些非常反人类的excel模板,博主为了养家糊口,也玩命做出了相应的解析方法... 我们先来看看第一类复杂表头: ...... 博主称这类excel模板为略复杂表头模板(蓝色部 ...
- poi获取合并单元格内的第一行第一列的值
当读取如图所示的excel时,显示为第1行 第1列 的内容是:合并单元格 其它在合并单元格区域内的单元格不显示 示例代码如下: import java.io.FileInputStream; impo ...
- Repeater多列分别合并单元格
GridView.Repeater合并单元格可以参考http://www.cnblogs.com/zhmore/archive/2009/04/22/1440979.html,但是原文例子是合并一列的 ...
- Aspose.Cells 首次使用,用到模版填充数据,合并单元格,换行
Aspose.Cells 首次使用,用到模版填充数据,合并单元格,换行 模版格式,图格式是最简单的格式,但实际效果不是这种,实际效果图如图2 图2 ,注意看红色部分,一对一是正常的,但是有一对多的订单 ...
随机推荐
- WPF笔记(2.4 Grid)
第一章已经简单介绍过这个容器,这一节详细介绍.Grid一般是用表格(Grid.Row 和Grid.Column )的,比StackPanel更细致一些,但是,这么玩很麻烦,先横着竖着定义一大堆,然后把 ...
- AWS认证权威考经(助理级认证篇)
笔者作为AWS官方认证的早期通过者,已经拿到了AWS的助理级解决方案架构师.开发者认证,系统管理员认证.这几年也陆续指导公司多人通过AWS的认证.本篇文章将分享如何通过自学的方式轻松通过AWS的助理级 ...
- [译] Linux吃掉了我的内存
英文原文: https://www.linuxatemyram.com/ 作者: Vidar Holen 译者: thinkam 发生了什么? Linux正借用你未使用的内存来做磁盘缓存.这使你的计算 ...
- windows程序设计获取文本框(窗口、对话框)文本
就是这样一个简单的界面,窗口上重绘的对话框(这种写法参考我之前博文): 需要做到的就是点击确定,获取文本框中内容. // 处理对话框消息 INT_PTR CALLBACK NewDlgProc(HWN ...
- python绘制图形(Turtle模块)
用python的Turtle模块可以绘制很多精美的图形,下面简单介绍一下使用方法. 需要用到的工具有python,python 的安装这里就不再细说.自行搜索. from turtle import ...
- Kakfa消息投递语义
Message Delivery Semantics At most once -- Messages may be lost but are never redelivered(消息可能丢失但不会重 ...
- Exchanger
Exchanger可以在两个线程之间交换数据,只能是2个线程,不支持更多的线程之间互换数据. 当线程A调用Exchange对象的exchange()方法后,他会进入阻塞状态,直到线程B也调用了exch ...
- 序列化和反序列化及Protobuf 基本使用
序列化和反序列化 序列化和反序列化在平常工作中会大量使用,然而并不一定非常清楚它的概念.序列化和反序列化的选型却是系统设计或重构一个重要的环节,在分布式.大数据量系统设计里面更为显著.机器间的通信需要 ...
- hdu 5909 Tree Cutting [树形DP fwt]
hdu 5909 Tree Cutting 题意:一颗无根树,每个点有权值,连通子树的权值为异或和,求异或和为[0,m)的方案数 \(f[i][j]\)表示子树i中经过i的连通子树异或和为j的方案数 ...
- BZOJ CF388D. Fox and Perfect Sets [线性基 数位DP]
CF388D. Fox and Perfect Sets 题意:求最大元素\(le n\)的线性空间的个数 给神题跪了 orz 容易想到 每个线性基对应唯一的线性空间,我们可以统计满足条件的对应空间不 ...