在昨天的博文中介绍了普通单元格数据的获取,以及单元格数据类型的转换,详细见博文:自动化不知如何参数化(一)?xlrd来帮你解决

昨天的那篇博文中,还有个获取合并单元格数据的问题没解决,今天就专门来讲一讲这个合并单元格数据的获取。

合并单元格概念

xlrd中提供了一个获取合并单元格的命令,如下:

meger_cell = sheet_object.merged_cells

我们通过这行命令,运行下,看下是个什么内容,打印结果如下所示:

从结果可以看出,这是一组坐标,但代表的是什么含义呢?我们结合excel数据内容来看,如下图所示:

这样来看的话,是不是就要清晰很多了。注意一下:xlrd库中,所有的坐标,都是从0开始的,同数组下标一样,接下来的博文内容中,都会讲到坐标,所以在这里统一注意下。

可能有博友又有疑问了,合并单元格中的4个坐标代表的什么意思?不着急,马上就讲解。

比如坐标(1,4,0,1),我们把坐标看作为(行起始位,行结束位,列起始位,列结束位)。再来对应查看,坐标1代表的就是第二行;坐标4代表的就是第五行;坐标0代表是第一列;坐标1代表的是第二列。

结合上述描述,博友们是不是很清楚了。细心的博友应该已经发现了一个规律,那就是:起始位的坐标是包含关系,而结束位的坐标是不包含的关系。所以,坐标(1,4,0,1)实际取的数据就是,第二行到第四行和第一列合并的数据。这就刚好与【搜索测试】合并单元格相匹配了。我相信,现在博友们已经明白合并单元格的坐标概念了。是不是很简单,也就那么回事,是吧。

代码实践

获取合并单元格数据

我们将上述分析的逻辑,转换成代码,如下所示:

row_index = 2
col_index = 6
for(rlow, rhight, clow, chight) in meger_cell:
if(row_index >= rlow and row_index < rhight):
if(col_index >= clow and col_index < chight):
cell_value = sheet_object.cell_value(rlow, clow)
print(cell_value)

上述代码,就是将(行起始位,行结束位,列起始位,列结束位)进行了一个比较,并获取数据,执行代码,结果展示如下:

读取合并&单个单元格数据

如上所示代码,有个缺陷,只能读取合并单元格的数据,可用性还是不高,那如何能做到既能读取合并单元格数据,又能读取到单个单元格数据呢。我们来看代码,如下所示:

def get_meger_cell_value(row_index, col_index):
cell_value = None
for(rlow, rhight, clow, chight) in meger_cell:
if(row_index >= rlow and row_index < rhight):
if(col_index >= clow and col_index < chight):
cell_value = sheet_object.cell_value(rlow, clow)
break
else:
cell_value = sheet_object.cell_value(row_index, col_index)
else:
cell_value = sheet_object.cell_value(row_index, col_index)
return cell_value print(get_meger_cell_value(0, 0))

如果博友们不懂获取数据逻辑,打个断点,调试代码即可,如下所示:

这样来看,是不是就很清楚了。上述代码,既能获取合并单元格的数据,又能获取单个单元格的数据。

以上就是解决获取合并单元格数据的方法了,希望对博友们有用。

最新文章

  1. [LeetCode] Convert Sorted Array to Binary Search Tree 将有序数组转为二叉搜索树
  2. Zabbix监控redis status
  3. 自己常用的webstrom快捷键
  4. NOI2018准备Day12
  5. HTML 图像显示
  6. 11 TCP/IP 基础与Linux的网络配置
  7. JAVA 想让类无法new,可以使用private将类的构造函数改为私有的,这样new的时候就会报错了
  8. uva 1421
  9. Struts2 页面url请求怎样找action
  10. oracle 如何搜索当前用户下所有表里含某个值的字段?(转)
  11. 自学HTML5第四节(canvas画布详解)
  12. Hadoop Error:Name node is in safe mode的解决方法
  13. &lt;转载&gt;Div+Css布局教程(-)CSS必备知识
  14. Object-C 基础学习笔记(for,foreach,while,switch)
  15. Samples for Parallel Programming with the .NET Framework
  16. 地图开发GIS的应用有哪些?
  17. 菜鸡谈OO 第一单元总结
  18. 深入浅出Redis
  19. c++ 为自定义类添加stl遍历器风格的遍历方式
  20. 比较两种方式的form请求提交

热门文章

  1. linux环境搭建单机kafka
  2. xxl-job搭建、部署、SpringBoot集成xxl-job
  3. 新手安装配置git简洁教程
  4. html+css快速入门教程(3)
  5. [CF1216E] Numerical Sequence hard version
  6. (私人收藏)[开发必备]最全JQuery离线快速查找手册(可查询可学习,带实例)
  7. 一、web自动化快速使用
  8. web测试要点、方法_web端测试大全总结
  9. P2882 Face The Right Way G 题解
  10. cmake的下载和安装