我试图仅拆分Excel文件(包含多个工作表)中的合并单元格,如:
请请注意,部分/完全空行。这些行未合并。
使用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']
由于我找到了合并的单元格范围,我需要拆分范围并填写相应的行,如下所示:
如何使用openpyxl
进行拆分?我是新手使用这个模块。非常感谢任何反馈!
答案 0 :(得分:1)
您需要使用unmerge功能。例如:
ws.unmerge_cells(start_row=2,start_column=1,end_row=2,end_column=4)
答案 1 :(得分:0)
当您使用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')