Python读取合并单元格数据并取消合并单元格——将每一行读取为列表

今天在解决需求的时候,遇到一个问题就是有一个Excel表格A列是合并单元格,但是我想 读取的时候,希望读取到的内容是非合并单元格,也就是说想取消合并单元格,并自动补充数据,好啦,我们一起看一下,下面的表:

我想让合并单元格的表转成取消合并单元格的样子

Python读取合并单元格数据并取消合并单元格——将每一行读取为列表_第1张图片Python读取合并单元格数据并取消合并单元格——将每一行读取为列表_第2张图片

先看视频演示,是不是你想要的效果:

安装的库

安装
xlrd pip install xlrd
openpyxl pip install openpyxl

我直接上代码啦:

如果有其他列也是合并单元格,也会依次取消合并单元格,并填充数据!!如上视频所示!

import xlrd


def get_excel():
    with xlrd.open_workbook('./测试表.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)


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__':
    apply_list = get_excel()

总结:

只要数据转为列表,那我们就可以做处理

1、如:将表头做键,表头以下信息作为值

2、如:将每一行信息作为字典嵌套,如:{A:{B:[C,D]}},这也是我今天遇到的问题,所以才产生了此文章

3、利用openpyxl将新数据写入新的Excel文件,正如上述代码

希望对大家有帮助

致力于办公自动化的小小程序员一枚

都看到这了,关注+点赞+收藏=不迷路!!

如果你想知道更多关于Python办公自动化的知识各位大佬给个关注吧!

我改了原帖的代码,原帖是:取消合并单元格,将表头做键,表头以下的信息做值,创建字典

原帖:点我查看

你可能感兴趣的:(Python自动化办公,python,excel,开发语言,pandas)