zoukankan      html  css  js  c++  java
  • 关于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方法,可以获取到所有合并的单元格~

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

    merged是调用merge_cell()方法后返回的1个dict,里面存放了key: 被合并的单元格地址, value: 合并到的单元格地址。
    这样就解决了同一个接口, 多参数的问题~

  • 相关阅读:
    php数组gbk和utf8的相互转化
    【原创】SSRS (SQL Serve Reporting Service) 访问权限的问题
    【原创】软件开发项目管理总结
    【原创】Team Foundation Server 域环境迁移
    【转载】 C#中数组、ArrayList和List三者的区别
    【转载】NuGet镜像上线试运行
    【原创】 关于全局静态变量初始化
    【转载】Fiddler进行模拟Post提交json数据,总为null解决方式
    【转载】解决Windows 10 局域网内共享的问题
    【原创】 查看端口号被占用
  • 原文地址:https://www.cnblogs.com/we8fans/p/7054730.html
Copyright © 2011-2022 走看看