# -*- coding: utf-8 -*- import sys sys.stdout.reconfigure(encoding='utf-8') import openpyxl wb = openpyxl.load_workbook('충청남도_서천군.xlsx'); ws = wb.active mfill = {} for mr in ws.merged_cells.ranges: if mr.min_col in (4,5,6) and mr.min_row >= 3: top = ws.cell(mr.min_row, mr.min_col).value for rr in range(mr.min_row, mr.max_row+1): mfill[(rr, mr.min_col)] = top def eff(r,c): v = ws.cell(r,c).value return v if v not in (None,'') else mfill.get((r,c)) def show(rng): for r in rng: D,E,F = eff(r,4),eff(r,5),eff(r,6) own = [ws.cell(r,c).value for c in range(2,11)] k = ws.cell(r,11); link = k.hyperlink.target if k.hyperlink else None print(f'r{r} B={own[0]} C={own[1]} | DEF(eff)={D!r}/{E!r}/{F!r} | G~J={own[5:9]} | K={link}') for region in [range(162,176), range(408,416)]: print('=====') show(region) print('\n=== D/E/F merges overlapping 162..176 & 408..416 ===') for mr in ws.merged_cells.ranges: if mr.min_col in (4,5,6): for lo,hi in [(162,176),(408,416)]: if not (mr.max_row < lo or mr.min_row > hi): col={4:'D',5:'E',6:'F'}[mr.min_col] print(f' {col}: {mr} top={ws.cell(mr.min_row,mr.min_col).value!r}') break