本人前端开发工程师,python小白,在工作中,需要将合并的单元格拆分。
拆分后,只有第一项有值,其余都是空值,当数据多的时候填充起来就会麻烦。以下python代码将合并单元格拆分后进行赋值。
from openpyxl import load_workbook, Workbook
path = "C:/Users/79234/Desktop/py/"
# 获取文件
wb = load_workbook(path+'demo.xlsx')
# 选择第一张表
name_list = wb.sheetnames
worksheet = wb[name_list[0]]
# 合并单元格的位置信息,可迭代对象(单个是一个'openpyxl.worksheet.cell_range.CellRange'对象)
m_list = worksheet.merged_cells
# 行、列
mergedArr = []
for m_area in m_list:
# 合并单元格的起始坐标、终止坐标 r1-r2横向 c1-c2纵向
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:
mergedArr.append((r1, r2, c1, c2))
# 合并单元格的信息提取出再拆分
for r in mergedArr:
value = worksheet.cell(r[0], r[2]).value
# 拆分单元格(只执行一次)
worksheet.unmerge_cells(start_row=r[0], end_row=r[1],
start_column=r[2], end_column=r[3])
# 循环赋值
# 横向
for col in range(r[2], r[3]):
# 向右赋值
worksheet.cell(row=r[0], column=col+1,
value=value)
# 纵向
for row in range(r[0], r[1]):
# row左闭右开区间 row+1 = (r[0]+1)~r[1]
# 向下赋值
worksheet.cell(
row=row+1, column=r[2], value=value)
for col in range(r[2], r[3]):
# 向右下赋值
worksheet.cell(row=row+1, column=col+1,
value=value)
wb.save(path+'demo.xlsx')
多行多列的单元格,只可拆分一次,所以合并的单元格数据都存放在mergedArr中。根据不同的方向进行拆分。
本文参考: https://blog.csdn.net/weixin_44788825/article/details/104526131
其作者是单列的填充,借鉴后根据自身需求改为多行多列。