如何使用Python拆分合并的Excel单元格?

4
我正在尝试拆分Excel文件(含多个工作表)中仅合并的单元格,如下图所示:

Original sheets

请注意,有部分/完全空行。这些行没有被合并。
使用openpyxl,我使用以下代码找到了每个工作表中的合并单元格范围:
wb2 = load_workbook('Example.xlsx')  
sheets = wb2.sheetnames  ##['Sheet1', 'Sheet2']
for i,sheet in enumerate(sheets):
    ws = wb2[sheets[i]]
    print(ws.merged_cell_ranges)   

打印输出:
['B3:B9', 'B13:B14', 'A3:A9', 'A13:A14', 'B20:B22', 'A20:A22'] ['B5:B9', 'A12:A14', 'B12:B14', 'A17:A18', 'B17:B18', 'A27:A28', 'B27:B28', 'A20:A22', 'B20:B22', 'A3:A4', 'B3:B4', 'A5:A9'] 由于我找到了合并单元格范围,我需要拆分这些范围并填充相应的行,如下所示: Desired Sheets 我该如何使用 openpyxl 进行拆分?我是使用这个模块的新手。非常感谢您的任何反馈!
2个回答

2
您需要使用取消合并的功能。示例:
```` unmerge() ````
ws.unmerge_cells(start_row=2,start_column=1,end_row=2,end_column=4)

1
当您使用unmerge_cells函数时,sheet.merged_cells.ranges将被修改,因此不要在for循环中使用sheet.merged_cells.ranges。
from openpyxl.workbook import Workbook
from openpyxl import load_workbook
from openpyxl.utils.cell import range_boundaries

wb = load_workbook(filename = 'tmp.xlsx')

for st_name in wb.sheetnames:
    st = wb[st_name]
    mcr_coord_list = [mcr.coord for mcr in st.merged_cells.ranges]
    
    for mcr in mcr_coord_list:
        min_col, min_row, max_col, max_row = range_boundaries(mcr)
        top_left_cell_value = st.cell(row=min_row, column=min_col).value
        st.unmerge_cells(mcr)
        for row in st.iter_rows(min_col=min_col, min_row=min_row, max_col=max_col, max_row=max_row):
            for cell in row:
                cell.value = top_left_cell_value

wb.save('merged_tmp.xlsx')

当我说:你彻底改变了我的生活时,我并不夸张。谢谢! - b.devog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接