• 自动化不知如何参数化(二)?xlrd来帮你解决


    在昨天的博文中介绍了普通单元格数据的获取,以及单元格数据类型的转换,详细见博文:自动化不知如何参数化(一)?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))

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

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

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

  • 相关阅读:
    设置全屏的方法
    The connection to adb is down,and a server error has occured.解决办法---------------------亲测有效
    android 案例二 登录界面
    javaweb项目编译错误
    Ubuntu 14.04 tomcat配置
    Ubuntu 14.03 安装jdk
    Ubuntu 14.03 安装mysql
    Git 版本管理使用说明。
    getColor问题
    WebView 调试
  • 原文地址:https://www.cnblogs.com/hong-fithing/p/13380151.html
Copyright © 2020-2023  润新知