DB_JOB/작업파일/_스크립트/_gmerge_wellformed.py
hehihoho3 df16c98366 백업: DB수집 전체 스냅샷 (공공기관2 정리 전)
공공기관2 작업 중. _temp 몽타주(재생성가능)는 제외.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 18:15:40 +09:00

30 lines
1.4 KiB
Python

import sys, io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
import openpyxl
ws = openpyxl.load_workbook(r'D:\01.프로젝트\DB수집\작업파일\_제출패키지_2026-06-03\프리랜서1\충청남도_부여군.xlsx').active
merges=list(ws.merged_cells.ranges)
def eff(r,c):
for m in merges:
if m.min_row<=r<=m.max_row and m.min_col<=c<=m.max_col:
return ws.cell(m.min_row,m.min_col).value
return ws.cell(r,c).value
gmerges=sorted([m for m in merges if m.min_col==7 and m.min_row>=3], key=lambda x:x.min_row)
cross=0
for m in gmerges:
fvals={eff(r,6) for r in range(m.min_row,m.max_row+1)}
evals={eff(r,5) for r in range(m.min_row,m.max_row+1)}
if len(fvals)>1 or len(evals)>1:
cross+=1; print('CROSS', m, 'F=',fvals,'E=',evals)
# H/I/J merges?
hij=[str(m) for m in merges if m.min_col>=8 and m.min_row>=3]
# rows under G-merges always have own H value?
missingH=[]
for m in gmerges:
for r in range(m.min_row,m.max_row+1):
if ws.cell(r,8).value in (None,''): missingH.append(r)
print(f'G병합 {len(gmerges)}개 F/E경계 넘는것 {cross}개 H/I/J병합 {len(hij)}개 G병합내 H빈칸 {len(missingH)}')
# which F groups (읍면 etc) contain G merges
fset=sorted({eff(m.min_row,6) for m in gmerges})
print('G병합 포함 F그룹:', fset)
print('E그룹:', sorted({eff(m.min_row,5) for m in gmerges}))