Python编程之读取Excel xlsx格式带合并单元格的文件

1、文件内容

在这里插入图片描述

2、代码实现

import xlrd
apply_dic = []
def get_excel():
    with xlrd.open_workbook(r'kecheng.xlsx') as workbook:
        name_sheets = workbook.sheet_names()  # 获取Excel的sheet表列表,存储是sheet表名
        for index in name_sheets:  # for 循环读取每一个sheet表的内容
            sheet_info = workbook.sheet_by_name(index)  # 根据表名获取表中的所有内容,sheet_info也是列表,列表中的值是每个单元格里值
            first_line = sheet_info.row_values(0)  # 获取首行,我这里的首行是表头,我打算用表头作为字典的key,每一行数据对应表头的value,每一行组成一个字典
            values_merge_cell = merge_cell(sheet_info)  # 这里是调用处理合并单元格的函数
            for i in range(1, sheet_info.nrows):  # 开始为组成字典准备数据
                other_line = sheet_info.row_values(i)
                for key in values_merge_cell.keys():
                    if key[0] == i:
                        other_line[key[1]] = values_merge_cell[key]
                # print(other_line)
                dic = list_dic(first_line, other_line)  # 调用组合字典的函数,传入key和value,字典生成
                apply_dic.append(dic)
            return apply_dic


def list_dic(list1, list2):
    '''
    two lists merge a dict,a list as key,other list as value
    :param list1:key
    :param list2:value
    :return:dict
    '''
    dic = dict(map(lambda x, y: [x, y], list1, list2))
    return dic


def merge_cell(sheet_info):
    '''
    #handle Merge transverse cells and handle Merge Vertical Cells, assign empty cells,
    :param rlow:row, include row exclusive of row_range
    :param rhigh:row_range
    :param clow:col, include col exclusive of col_range
    :param chigh:col_range
    :param sheet_info:object of sheet
    :return:dic contain all of empty cells value
    '''
    merge = {}
    merge_cells = sheet_info.merged_cells
    for (rlow, rhigh, clow, chigh) in merge_cells:
        value_mg_cell = sheet_info.cell_value(rlow, clow)
        if rhigh - rlow == 1:
            # Merge transverse cells
            for n in range(chigh - clow - 1):
                merge[(rlow, clow + n + 1)] = value_mg_cell
        elif chigh - clow == 1:
            # Merge Vertical Cells
            for n in range(rhigh - rlow - 1):
                merge[(rlow + n + 1, clow)] = value_mg_cell
    return merge


if __name__ == '__main__':
    get_excel()
    for i in apply_dic:
        print(i)

3、输出结果:

以字典的形式输出,合并的单元格被填充
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

废人一枚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值