← 목록
기타 2026-07-17 5KB 읽기 5분

크라우니 오피스 시트 punch #1(수식엔진) + #2(셀 데이터모델) 브릿지 연결

개요

크라우니 오피스 시트(Sheets) 모듈의 판정표 우선순위 1·2번 — 수식 엔진 연결과 셀 데이터모델 일반화 — 를 문서(Docs) 모듈과 동일한 브릿지 2계층 패턴으로 배선했다. 앱 번들(ModuleSheets, DCLogic 커스텀 프레임워크)은 무수정, crownyBridge.js가 런타임 몽키패치로 로직을 갈아끼웠다.

배경

spec/시트기능-판정표.md 실측: 앱 시트는 defaults 6개 원시셀(C2:D4)만 편집 가능한 하드코딩 데모였다. fx바 재계산은 진짜였지만 수식 파싱은 parseInt(...replace(/[^0-9]/g,''))로 숫자만 추출 — =SUM(...) 등 문자열 수식은 전혀 파싱되지 않았다. CrownyDoc에 이미 완성된 수식파서.한선(85+함수)·시트엔진.한선(data{key:{value,formula}} 모델)이 있었지만 이 번들에 전혀 연결돼 있지 않았다.

무엇을 했는지

  1. 셀 데이터모델 일반화window.__dcRegistry.ModuleSheets.Logic.prototype.renderVals
전체 교체(런타임 몽키패치, 폴링으로 모듈 지연로드 대응). this.state.vals{ref: 리터럴|"="수식} 임의 셀 저장소로 확장(A1:G7, 그리드 열수는 템플릿 grid-template-columns:repeat(7,...) 하드코딩 제약이라 유지).
  1. 수식 엔진makeEvaluator()가 수식파서.한선 파이프라인(lookup 선처리→범위확장→
참조치환→함수치환→최종 Function eval)을 JS로 이식. SUM/AVERAGE/MIN/MAX/COUNT/COUNTA/ABS/ ROUND류/POWER/SQRT/MOD/INT/IF/AND/OR/NOT/IFERROR/CONCATENATE/LEFT/RIGHT/LEN/UPPER/LOWER/ TODAY + VLOOKUP/INDEX/MATCH(보너스). 매 렌더마다 전체 재평가(메모+순환참조 visiting 가드, 빈 셀=0)라 의존성 그래프 없이도 참조 셀이 바뀌면 항상 최신값.
  1. 한선씨 정본bundle/office/bridge/시트셀.한선 신규(참조파싱·범위확장·SUM·순환참조감지·
빈셀기본값 규칙, 수식파서.한선·시트엔진.한선 이식/재사용). hanseonc_high 컴파일 + crownyc run 자체시험 21/21 PASS.
  1. F열(비중) 표시만 별도 포맷(Math.round(v*100)+'%')으로 원본 데모 시각 동일성 유지, 진짜
빈 셀은 hasOwnProperty 체크로 "0"이 아닌 공백 유지(회귀 방지).

실측 검증 (CDP :9333)

node 기반 CDP 클라이언트로 페이지 새로고침→crownyBridge.js 주입→시트탭 진입→ ModuleSheets.Logic 패치 확인 후:

  • 빈 셀 G2에 =SUM(C2:D2) 입력 → 9,000,000 (하드코딩 아닌 실계산, DOM diff 확인)
  • C2를 4,200,000→9,999,999로 변경 → E2(=C2+D2)·G2(=SUM(C2:D2)) 둘 다 14,799,999로 동시
재계산 전파(열 합계도 19,699,999/34,899,999 갱신) — 재계산 전파 증명
  • 빈 셀 G3에 =C3+D3 → 14,500,000 (산술)
  • 빈 셀 G5에 =VLOOKUP("마케팅",A2:F4,3) → 6,500,000 (C3, 보너스 함수 정확 동작)
  • E4 선택 시 fx바에 =C4+D4 원문 echo (펀치#3 최소요건: 클릭→fx바 편집→Enter 커밋 왕복)
문서 회귀: 회귀실행.sh 27/27 PASS 유지(시트 변경이 ModuleDocs를 건드리지 않음). 네이티브(crowny-browser.m·crowny-shell.m·Makefile·CrownyAI 바이너리) 무수정, CrownyAI 3초 생존 확인.

관련 파일

  • /Users/ef/crownybrowser/bundle/office/bridge/crownyBridge.js — §19 신규 섹션(시트 브릿지)
  • /Users/ef/crownybrowser/bundle/office/bridge/시트셀.한선 — 신규, 자체시험 21/21
  • /Users/ef/crownybrowser/spec/시트기능-판정표.md — "【완료】 punch #1+#2" 섹션 추가
  • /Users/ef/crownybrowser/spec/문서-회귀리포트.md — 27/27 최신 리포트
  • 참조(미수정, 정본): /Users/ef/CrownyDoc/한선씨/시트/수식파서.한선 · 시트엔진.한선 ·
셀서식.한선

잔여 이슈 (판정표 우선순위 #3~#10, 이번 punch 범위 밖)

  • 다중시트 독립 데이터(현재 "인건비" 탭이 "예산"과 동일 데이터 표시 — 미해결 상속 이슈)
  • ₩/%/.00 서식 버튼 실적용, 조건부서식 실규칙 엔진(패널 전환만 진짜)
  • 행/열 추가·삭제·크기조절, 다중 범위선택(드래그), 복사/붙여넣기/키보드 내비게이션
  • 필터, 다른 열(A/B/D/E/F/G) 정렬, 함수 도우미 클릭 시 fx바 자동 삽입
  • cdf 저장/재열기 시 새 셀 데이터모델(state.vals) 직렬화 왕복은 아직 미배선(Phase 2 저장
계층과의 연결은 후속 — 현재는 세션 내 메모리 상태에서만 동작)