DB_JOB/작업파일/공공기관3/완료/5.한국임업진흥원/_verify.py
2026-06-26 09:47:44 +09:00

63 lines
2.3 KiB
Python

# -*- coding: utf-8 -*-
import openpyxl, io
from openpyxl.utils.cell import range_boundaries
wb=openpyxl.load_workbook("한국임업진흥원.xlsx")
ws=wb.active
out=io.open("_verify_out.txt","w",encoding="utf-8")
def P(*a): out.write(" ".join(str(x) for x in a)+"\n")
MAXR=ws.max_row
P("max_row",MAXR)
# B continuity
bs=[ws.cell(r,2).value for r in range(3,MAXR+1)]
exp=list(range(1,len(bs)+1))
P("B contiguous 1..N:", bs==exp, "Bmax",bs[-1])
# merge overlap + bounds
cells={}; overlap=0; outofDJ=0
for m in ws.merged_cells.ranges:
s=str(m)
if s in ("B1:R1","S1:W1","Y1:AA1"): continue
c1,r1,c2,r2=range_boundaries(s)
if not(4<=c1<=10 and 4<=c2<=10): outofDJ+=1; P(" OOB merge",s)
for r in range(r1,r2+1):
for c in range(c1,c2+1):
if (r,c) in cells: overlap+=1
cells[(r,c)]=s
P("merge overlaps:",overlap,"out-of-DJ:",outofDJ,"total data merges:",len(ws.merged_cells.ranges)-3)
# DEF holes: each row D..leaf contiguous; merged cells count as filled
filled={}
for m in ws.merged_cells.ranges:
c1,r1,c2,r2=range_boundaries(str(m))
top=ws.cell(r1,c1).value
for r in range(r1,r2+1):
for c in range(c1,c2+1): filled[(r,c)]=top
def gv(r,c):
v=filled.get((r,c),ws.cell(r,c).value); return v if (v is not None and str(v).strip()!="") else None
holes=0; nok=0; noK=0
for r in range(3,MAXR+1):
vals=[gv(r,c) for c in range(4,11)]
leaf=-1
for i,v in enumerate(vals):
if v is not None: leaf=i
# contiguity D..leaf
for i in range(0,leaf+1):
if vals[i] is None: holes+=1; P(" HOLE r",r,"col",4+i,vals); break
# K present on leaf rows? (allow site rows w/ K; flag empty K)
k=ws.cell(r,11).value
if not k or not str(k).strip():
noK+=1; P(" noK r",r,vals)
else:
# hyperlink matches value
hl=ws.cell(r,11).hyperlink
if hl and str(hl.target).strip()!=str(k).strip(): nok+=1; P(" K mismatch r",r,k,hl.target)
P("DEF holes:",holes,"K-hyperlink mismatch:",nok,"empty-K rows:",noK)
# dump sample groups
P("\n--- sample rows ---")
for r in list(range(3,18))+list(range(95,118)):
if r>MAXR: break
vv=[]
for c in range(2,18):
v=ws.cell(r,c).value
if v is not None and str(v).strip()!="": vv.append("%s=%s"%(openpyxl.utils.get_column_letter(c),v))
P(r," | ".join(vv))
out.close(); print("done")