"""옥성교 도면↔모델 마크별 대조 이미지를 '형상 일람(모델)' 시트 아래에 추가하고 '수정 내역' R-23(점검, 수정 없음) 기록. 백업(양쪽) → Pier_T → 원본 복사 → SHA 확인.""" import copy, datetime, hashlib, shutil, sys from pathlib import Path import openpyxl from openpyxl.drawing.image import Image as XLImage from openpyxl.styles import Font, PatternFill ROOT = Path(r"D:\★Pier 자료\프로그램\Pier_T"); REV = ROOT / "검토파일"; ORIG = Path(r"D:\★Pier 자료\심수석님 검토 파일"); NAME = "4개교_공통사항_종합.xlsx" CAP = REV / "수정후_캡처" stamp = datetime.date.today().strftime("%Y%m%d") for d in (REV, ORIG): shutil.copy2(d / NAME, d / ("4개교_공통사항_종합_백업_%s_도면대조옥성.xlsx" % stamp)) wb = openpyxl.load_workbook(REV / NAME) ws, sh = wb["수정 내역"], wb["형상 일람(모델)"] if any(r[0].value == "R-23" for r in ws.iter_rows(min_row=4)): sys.exit("이미 있음") YEL = PatternFill("solid", fgColor="FFFFF2CC") def append_like(sheet, values, like_row): r = sheet.max_row + 1 for j, v in enumerate(values, 1): c = sheet.cell(row=r, column=j, value=v); s = sheet.cell(row=like_row, column=j) c.font = copy.copy(s.font); c.fill = copy.copy(s.fill); c.border = copy.copy(s.border); c.alignment = copy.copy(s.alignment); c.number_format = s.number_format sheet.auto_filter.ref = "A3:%s%d" % (openpyxl.utils.get_column_letter(sheet.max_column), r) return r r = append_like(ws, ["R-23", "옥성교", "도면 철근상세 그림 ↔ 모델 형상 마크별 대조 (코핑 C1~C20·S1~S8, 기초 B1~B12)", "옥성교 P1 코핑·기초 전 마크(이미지 2장)", "도면 그림과 모델 형상을 한 장에서 비교한 자료가 없었음", "도면 그림(왼쪽)·모델 형상(오른쪽)·표 L/모델 L 을 마크별로 나란히 작성. 수정은 하지 않음 (시트 '형상 일람(모델)' 하단)", 0, "사용자 요청 2026-10-27: 겹침 보류 항목은 두고 도면 형상 대조 이미지 작성", "옥성교P1_G5_수정7_20261027.3dm (형상은 수정6 시점 추출, J 겹침 전후 형상 동일)", "일치: C1~C6, C8·C10·C12, C7, C18~C20, S1~S8, B1~B8·B11·B12. 확인: C9·C11·C13(오각형), B9, B10. 도면 그림 없음: C14·C16(j550×4 루프)", "불일치: C15·C17 — 도면은 양끝 갈고리(r80, b188, c140; C17 은 j550 포함) / 모델은 직선. 형상 보정 필요(도면 확인 후 진행). 이미지의 모델 L 은 J 겹침 이전 측정값"], 4) ws.cell(row=r, column=1).fill = YEL row = max(i.anchor._from.row + int(i.height / 20) for i in sh._images) + 6 for p in (CAP / "도면대조_옥성_코핑.png", CAP / "도면대조_옥성_기초.png"): sh.cell(row=row, column=1, value="옥성 " + p.stem.split("_")[-1] + " — 도면 ↔ 모델 대조").font = Font(bold=True, size=12) im = XLImage(str(p)); w0, h0 = im.width, im.height im.width, im.height = 1250, int(1250 * h0 / w0) sh.add_image(im, "A%d" % (row + 1)); row += int(im.height / 20) + 4 wb.save(REV / NAME); shutil.copy2(REV / NAME, ORIG / NAME) sha = lambda p: hashlib.sha256(Path(p).read_bytes()).hexdigest() print("sha equal:", sha(REV / NAME) == sha(ORIG / NAME), sha(REV / NAME)[:16], "sheet images:", len(sh._images))