# -*- coding: utf-8 -*- import openpyxl, copy F='전북특별자치도_순창군.xlsx' wb=openpyxl.load_workbook(F); ws=wb.active # ===== 3) 가맹점 G221:G224 병합해제 + 필터라벨 ===== labels={221:'이용 가맹점(지류상품권)',222:'이용 가맹점(모바일상품권)', 223:'이용 가맹점(BC카드)',224:'이용 가맹점(NH카드)'} # 병합 해제 for m in list(ws.merged_cells.ranges): if str(m)=='G221:G224': ws.unmerge_cells('G221:G224') src=ws.cell(221,7) # 스타일 원본(G221) src_font=copy.copy(src.font); src_align=copy.copy(src.alignment) src_border=copy.copy(src.border); src_fill=copy.copy(src.fill); src_fmt=src.number_format for r,lab in labels.items(): c=ws.cell(r,7); c.value=lab c.font=copy.copy(src_font); c.alignment=copy.copy(src_align) c.border=copy.copy(src_border); c.fill=copy.copy(src_fill); c.number_format=src_fmt # ===== 2) B순번 1..N 연속 재번호 (content행 전부) ===== content=[r for r in range(3,ws.max_row+1) if ws.cell(r,2).value not in (None,'') or ws.cell(r,11).value not in (None,'') or any(ws.cell(r,c).value not in (None,'') for c in range(4,11))] # B스타일 원본: 기존 숫자행 하나 bsrc=None for r in content: if isinstance(ws.cell(r,2).value,int): bsrc=ws.cell(r,2); break bf=copy.copy(bsrc.font); ba=copy.copy(bsrc.alignment); bb=copy.copy(bsrc.border); bfmt=bsrc.number_format for i,r in enumerate(content,1): c=ws.cell(r,2) if c.value!=i: c.value=i if not isinstance(ws.cell(r,2).value,int) or c.font is None: pass # 빈칸이었던 행 스타일 보정 c.font=copy.copy(bf); c.alignment=copy.copy(ba); c.border=copy.copy(bb); c.number_format=bfmt wb.save(F) print('저장완료. content/B순번 행수=',len(content),'→ B 1..%d'%len(content))