DB_JOB/작업파일/_스크립트/_diag_buyeo_border4.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

37 lines
1.4 KiB
Python

import sys, io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
import openpyxl
from openpyxl.utils import get_column_letter
PKG = r'D:\01.프로젝트\DB수집\작업파일\_제출패키지_2026-06-03\프리랜서1\충청남도_부여군.xlsx'
ws = openpyxl.load_workbook(PKG).active
# which columns are ever part of a merge (rows>=3)
mergecols=set()
for m in ws.merged_cells.ranges:
if m.min_row>=3:
for c in range(m.min_col,m.max_col+1): mergecols.add(c)
print('merged columns (>=3):', sorted(get_column_letter(c) for c in mergecols))
def anyb(cell):
b=cell.border
return any([b.left.style,b.right.style,b.top.style,b.bottom.style])
# cells in merge (interior or anchor)
def in_merge(r,c):
for m in ws.merged_cells.ranges:
if m.min_row<=r<=m.max_row and m.min_col<=c<=m.max_col:
return True
return False
print('\n=== per-column: rows(3-572) NOT in merge AND no border ===')
for c in range(2,28):
miss=[r for r in range(3,ws.max_row+1) if not in_merge(r,c) and not anyb(ws.cell(r,c))]
if miss:
print(f' col {get_column_letter(c)}: {len(miss)} rows e.g. {miss[:6]}')
# row 233 per-column border presence (reference)
print('\n=== row 233 reference border (style on each side) ===')
for c in range(2,28):
cell=ws.cell(233,c); b=cell.border
print(f' {get_column_letter(c)}: L={b.left.style} R={b.right.style} T={b.top.style} B={b.bottom.style}')