excel列内容合并与拆分python (python拆分excel表到不同的文件)

实现目标:

excel列内容合并与拆分python,python拆分excel数据成多行

数据来源:新豹T3官网配置

将excel中带有合并单元格的数据,进行拆分合并单元格并填充相同的数据。

excel列内容合并与拆分python,python拆分excel数据成多行

完整代码:

import openpyxl
def merged_cells(old,new):

    workbook = openpyxl.load_workbook(old)  #加载已经存在的excel
    # workbook = openpyxl.Workbook(path)
    name_list = workbook.sheetnames
    # worksheet = workbook.get_sheet_by_name(name_list[0])  #最新版本已经不能使用这种方法
    worksheet = workbook[name_list[0]]


    m_list = worksheet.merged_cells  #合并单元格的位置信息,可迭代对象(单个是一个\'openpyxl.worksheet.cell_range.CellRange\'对象),print后就是excel坐标信息
    # print(m_list)
    cr = []
    for m_area in m_list:
        # 合并单元格的起始行坐标、终止行坐标。。。。,
        r1, r2, c1, c2 = m_area.min_row, m_area.max_row, m_area.min_col, m_area.max_col
        # print(m_area)
        # print(r1,r2,c1,c2)
        # 纵向合并单元格的位置信息提取出
        cr.append((r1, r2, c1, c2))
        # print('符合条件%s' % str(m_area))

    # 这里注意需要把合并单元格的信息提取出再拆分
    print(cr)
    for r in cr:
        # print(r)
        worksheet.unmerge_cells(start_row=r[0], end_row=r[1],
                                start_column=r[2], end_column=r[3])
        # print(r[0])
        # for r1,r2,c1,c2 in range([r[0], r[1],r[2],r[3]]):
            # print(row)
    for r in cr:
        print(r)
        for row in range(r[0],r[1]):
            rown=row + 1
            worksheet.cell(row=rown, column=r[3], value=worksheet.cell(r[0], r[3]).value)
            print('填充',rown,r[3])
            for col in range(r[2],r[3]+1):
                worksheet.cell(row=row + 1, column=col, value=worksheet.cell(r[0], r[2]).value)
                print('填充',row + 1,col)
        if r[0]==r[1]:
            for col in range(r[2],r[3]+1):
                worksheet.cell(row=r[0], column=col, value=worksheet.cell(r[0], r[2]).value)
                print('填充',r[0],col)
        workbook.save(new)


if __name__ == '__main__':
    old=r'C:\Users\yellow\Documents\测试合并单元格.xlsx'
    save = r'C:\Users\yellow\Documents\test.xlsx'
    merged_cells(old,save)

核心步骤:

一、定位到合并单元格的区域

二、找到合并单元格的4个点

三、用左上角的数据填充其他区域的数据(1、会涉及到相同行的合并单元格。2、会涉及到相同列的合并单元格。3、多行多列的合并单元格)

操作合并单元格,极大地提高了手动点击的效率,并且不容易人工的遗漏其他合并单元格。