实现目标:
数据来源:新豹T3官网配置
将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、多行多列的合并单元格)
操作合并单元格,极大地提高了手动点击的效率,并且不容易人工的遗漏其他合并单元格。
,Copyright © 2008-2022 秒下下载站
m.down10s.com .All Rights Reserved