用openpyxl取消合并单元格并填充原值

本文介绍了如何使用Python的openpyxl库解决Excel表格中合并单元格的填充问题,包括读取合并单元格值、取消合并并重新填充,最后将操作封装成函数以方便重复使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前自已写了先读取数据再用dataframe空值的识别来填充原值, 可以解决大部分问题, 今天发现如果原本表格中有空值时, 可能出现误填充, 所以还是找找其他办法来解决. 

经测试, 用openpyxl可以解决这个问题

以下是合并前

from openpyxl import load_workbook

fdir = r'/Users/add58/Downloads/'

# 加载Excel文件
wb = load_workbook(fdir+'add58_wb.xlsx')

# 选择工作簿中的工作表
ws = wb['Sheet1']  # 或者使用 wb.get_sheet_by_name('Sheet1')

# 获取合并单元格的位置
merge_cell_list = [x.bounds for x in ws.merged_cells]

# 复制合并单元格的值并取消合并
for merged_cell in merge_cell_list:
    # 获取合并单元格的起始和结束坐标 
    # col_1, row_1, col_2, row_2对就(2, 4, 3, 4) 即 B4:C4
    col_1, row_1, col_2, row_2 = merged_cell
    
    # 读取合并单元格的值
    merge_cell_value = ws.cell(row=row_1, column=col_1).value
    
    # 取消合并
    ws.unmerge_cells(start_row=row_1, start_column=col_1, end_row=row_2, end_column=col_2)
    
    # 将原合并单元格的值填入新的单元格
    for row in range(row_1, row_2 + 1):
        for col in range(col_1, col_2 + 1):
            ws.cell(row=row, column=col, value=merge_cell_value)

# 保存工作簿
wb.save(fdir+'updated_add58_wb.xlsx')

合并后效果

做成函数

def openpyxl_unmerge_excel(file_dir,wb_name,ws_name='Sheet1'):
    from openpyxl import load_workbook
    
    unmerge_wb_name = 'unmerge_' + wb_name
    
    # 加载Excel文件
    wb = load_workbook(file_dir + wb_name)
    
    # 选择工作簿中的工作表
    ws = wb[ws_name]
    
    # 获取合并单元格的
    merge_cell_list = [x.bounds for x in ws.merged_cells]
    
    # 复制合并单元格的值并取消合并
    for merged_cell in merge_cell_list:
        
        # 获取合并单元格的起始和结束坐标 
        # col_1, row_1, col_2, row_2对就(2, 4, 3, 4) 即 B4:C4
        col_1, row_1, col_2, row_2 = merged_cell
        
        # 读取合并单元格的值
        merge_cell_value = ws.cell(row=row_1, column=col_1).value
        
        # 取消合并
        ws.unmerge_cells(start_row=row_1, start_column=col_1, end_row=row_2, end_column=col_2)
        
        # 将原合并单元格的值填入新的单元格
        for row in range(row_1, row_2 + 1):
            for col in range(col_1, col_2 + 1):
                ws.cell(row=row, column=col, value=merge_cell_value)
    
    # 保存工作簿
    wb.save(file_dir + unmerge_wb_name)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值