공공기관2 작업 중. _temp 몽타주(재생성가능)는 제외. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
42 lines
1.5 KiB
Python
42 lines
1.5 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
|
|
|
|
def bd(cell):
|
|
b=cell.border; f=lambda s:(s.style or '-')[:4]
|
|
return f'{f(b.left)}/{f(b.right)}/{f(b.top)}/{f(b.bottom)}'
|
|
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 str(m)
|
|
return ''
|
|
|
|
for r in (551,552,568,233):
|
|
print(f'\n=== row {r} ===')
|
|
for c in range(2,28):
|
|
mk=in_merge(r,c)
|
|
print(f' {get_column_letter(c)}{r}={bd(ws.cell(r,c))}{(" M="+mk) if mk else ""}')
|
|
|
|
# How many rows have a cell with PARTIAL border (some sides missing) in B..W (excl X) non-merge?
|
|
print('\n=== rows with incomplete border vs 233 template (non-merge, B..W excl X) ===')
|
|
tmpl={c:ws.cell(233,c).border for c in range(2,28)}
|
|
def sides(b): return (b.left.style,b.right.style,b.top.style,b.bottom.style)
|
|
bad=set()
|
|
for r in range(3,ws.max_row+1):
|
|
for c in range(2,28):
|
|
if c==24: continue
|
|
if in_merge(r,c): continue
|
|
if sides(ws.cell(r,c).border)!=sides(tmpl[c]):
|
|
bad.add(r)
|
|
print('rows differing from 233 template:', len(bad))
|
|
import itertools
|
|
def ranges(lst):
|
|
lst=sorted(lst); out=[]
|
|
for x in lst:
|
|
if out and x==out[-1][1]+1: out[-1][1]=x
|
|
else: out.append([x,x])
|
|
return [(a,b) for a,b in out]
|
|
print(ranges(bad)[:25])
|