Python 拆分excel表内所有合并单元格

import openpyxl

from openpyxl.styles import  PatternFill

workbook = openpyxl.load_workbook(r'C:\Users\Administrator\Desktop\user_info_format1.xlsx')  # 加载已经存在的excel

name_list = workbook.sheetnames #获取所有的sheet表名

worksheet = workbook[name_list[0]]

fill = PatternFill("solid", fgColor="FF0000") #设置填充样式

m_list = worksheet.merged_cells  # 合并单元格的位置信息,可迭代对象(单个是一个'openpyxl.worksheet.cell_range.CellRange'对象),print后就是excel坐标信息

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

    # 纵向合并单元格的位置信息提取出

    if r2 - r1 > 0 or c2 - c1 > 0:

        cr.append((r1, r2, c1, c2))

        print('符合条件%s' % str(m_area))

#print(cr)

# 这里注意需要把合并单元格的信息提取出再拆分

for r in cr:

    worksheet.unmerge_cells(start_row=r[0], end_row=r[1],

                            start_column=r[2], end_column=r[3])

    if r[3]-r[2]==0:  #单独列合并

        for row  in  (range(r[0], r[1]+1)):

            worksheet.cell(row=row, column=r[3], value=worksheet.cell(r[0], r[2]).value)


            worksheet.cell(row, column=r[3]).fill = fill #将对应拆分单元格填充颜色


    elif  r[1]-r[0]==0 :  #单独行合并

        for column  in  (range(r[2], r[3]+1)):

            worksheet.cell(row=r[1], column=column, value=worksheet.cell(r[0], r[2]).value)

            worksheet.cell(row=r[0], column=column).fill = fill #将对应拆分单元格填充颜色

    else :  #多行、列合并

        for row  in  (range(r[0], r[1]+1)): 

            for column  in  (range(r[2], r[3]+1)):

                worksheet.cell(row, column, value=worksheet.cell(r[0], r[2]).value)


                worksheet.cell(row, column).fill=fill #将对应拆分单元格填充颜色


workbook.save(r'C:\Users\Administrator\Desktop\data25.xlsx') #另存为新表

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容