63 lines
2.3 KiB
Python
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")
|