46 lines
1.7 KiB
Python
46 lines
1.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
import openpyxl, io
|
|
from openpyxl.styles import PatternFill
|
|
BK="한국임업진흥원_backup_tab01전개전.xlsx"
|
|
FN="한국임업진흥원.xlsx"
|
|
# original K -> (N, Gval) using merge-fill
|
|
def load(fn):
|
|
wb=openpyxl.load_workbook(fn); ws=wb.active
|
|
filled={}
|
|
for m in ws.merged_cells.ranges:
|
|
top=ws.cell(m.min_row,m.min_col).value
|
|
for r in range(m.min_row,m.max_row+1):
|
|
for c in range(m.min_col,m.max_col+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
|
|
d={}
|
|
for r in range(3,ws.max_row+1):
|
|
k=ws.cell(r,11).value
|
|
if not k: continue
|
|
k=str(k).strip()
|
|
d[k]=dict(N=ws.cell(r,14).value, G=gv(r,7))
|
|
return d
|
|
orig=load(BK)
|
|
wb=openpyxl.load_workbook(FN); ws=wb.active
|
|
SKY=PatternFill(start_color="FFBDD7EE", end_color="FFBDD7EE", fill_type="solid")
|
|
newrows=0; nchg=0; gadd=0
|
|
for r in range(3,ws.max_row+1):
|
|
k=ws.cell(r,11).value
|
|
k=str(k).strip() if k else ""
|
|
if k not in orig:
|
|
newrows+=1
|
|
for c in range(4,16): # D..O
|
|
v=ws.cell(r,c).value
|
|
if v is not None and str(v).strip()!="":
|
|
ws.cell(r,c).fill=SKY
|
|
else:
|
|
o=orig[k]
|
|
if (ws.cell(r,14).value or "")!=(o['N'] or ""):
|
|
ws.cell(r,14).fill=SKY; nchg+=1
|
|
# G newly added on anchor-self rows (orig had no G at this K, now has G)
|
|
gv=ws.cell(r,7).value
|
|
if gv is not None and str(gv).strip()!="" and not o['G']:
|
|
ws.cell(r,7).fill=SKY; gadd+=1
|
|
wb.save(FN)
|
|
print("new rows blued:",newrows,"N changed:",nchg,"G added:",gadd)
|