← 목록
기타 2026-05-19 3KB 읽기 4분

CrownyDoc 파일 호환 레이어 구현 (약점 #36 + #86)

개요

CrownyDoc Office Suite의 CRITICAL 약점 2개를 통합 구현.

  • 약점 #36: XLSX 가져오기/내보내기 없음 (스프레드시트, CRITICAL)
  • 약점 #86: DOCX/XLSX/PPTX 호환 없음 (공통/플랫폼, CRITICAL)

무엇을 했는지

신규 파일: file-compat.js

CrownyFileCompat 네임스페이스 구현 (약 350줄).

XLSX 호환:

  • xlsx.parse(arrayBuffer) — ZIP 파서 + XML 파싱으로 XLSX 직접 파싱 시도
  • 간이 ZIP 로컬 파일 헤더 파서 (PK\x03\x04 시그니처)
  • xl/sharedStrings.xml + xl/worksheets/sheet1.xml 추출 및 파싱
  • 압축(deflate) 파일은 실용 fallback(CSV 경로 안내) 제공
  • xlsx.pasteFromExcel(text) — 클립보드/TSV 기반 Excel 데이터 직접 붙여넣기
  • xlsx.export() — CSV(UTF-8 BOM) 내보내기, Excel 직접 호환
  • DOCX 호환:

  • docx.parse(arrayBuffer) — ZIP 파서 + word/document.xml 파싱 → HTML 변환
  • <w:p> 단락, <w:r> 런(run) 파싱
  • bold/italic/underline/strikethrough/font-size/color 서식 보존
  • 제목(Heading1~6), 텍스트 정렬 보존
  • docx.importFromHTML(html) — Word 복사-붙여넣기 HTML 정리 (mso-* 제거)
  • docx.exportToHTML(html) — 깨끗한 독립 HTML 내보내기 (Word 붙여넣기 호환)
  • PPTX 호환:

    • pptx.exportAsHTML(slides) — 슬라이드 → 독립 HTML 파일 (키보드 탐색, 인쇄/PDF 지원)
    공통 UI:
    • showImportDialog() — 형식 선택 가져오기 다이얼로그
    • showExportDialog() — 모드(doc/sheet/slide)별 내보내기 형식 선택 다이얼로그
    • detectFormat(file) — 파일 확장자 기반 형식 자동 감지
    • CSS 자동 주입 (.compat-dialog, .compat-format-btn)
    간이 ZIP 파서 (_zip.extractAll):
    • PK\x03\x04 시그니처 스캔
    • 비압축(comprMethod=0) 파일 직접 추출
    • deflate 압축 파일은 실용 fallback

    한선씨 동반 파일: 파일호환.한선

    주요 함수:

    • XML디코딩, 형식감지, CSV셀인코딩
    • 열인덱스 (Excel 컬럼 문자 → 숫자)
    • MSO클린업, 슬라이드HTML뼈대, 다운로드파일명, 내보내기형식목록

    index.html 업데이트

    error-fixes.js 뒤에 file-compat.js 스크립트 태그 추가.

    benchmark-weaknesses.json 업데이트

    ID 36, 86 → status: "done" 변경.

    관련 파일 경로

    • /Users/ef/CrownyDoc/한선씨/정적/file-compat.js — 신규 (메인 구현)
    • /Users/ef/CrownyDoc/한선씨/공용/파일호환.한선 — 신규 (한선씨 동반)
    • /Users/ef/CrownyDoc/한선씨/정적/index.html — 스크립트 태그 추가
    • /Users/ef/CrownyDoc/benchmark-weaknesses.json — 상태 업데이트
    • /Users/ef/CrownyDoc/한선씨/정적/import.js — 참조 (기존 CSV/HTML 가져오기)
    • /Users/ef/CrownyDoc/한선씨/정적/export-sheet.js — 참조 (기존 CSV/HTML 내보내기)

    잔여 이슈

    1. deflate 압축 XLSX 완전 파싱: 현재 비압축 ZIP 엔트리만 지원. DecompressionStream API는 비동기라 동기 파서 구현 필요 — 실용 우회: Excel에서 "CSV로 저장" 후 가져오기 안내.
    2. XLSX 네이티브 내보내기: 현재 CSV 다운로드로 대체. 완전한 XLSX 생성은 ZIP 빌더 구현 필요.
    3. PPTX 가져오기: 현재 미구현 (내보내기만). pptx의 ppt/slides/slide1.xml 파싱 후속 필요.
    4. showImportDialog / showExportDialog: 현재 파일 선택 버튼으로 연결됨 — 앱 UI 메뉴바에 연결 필요.