Problem
Original text:
「這值得放到macdoc」
— Source: 使用者(2026-07-17,聽完 .xlsm zip 注入原理解說後)
#135 經驗清單第 2 條(「.xlsm 巨集注入(零 GUI)」)只有摘要;完整的原理與驗證方法論散在對話裡,應沉澱成 macdoc docs 設計論述(同 docs/applescript-swift-parity.md 體例),並成為 che-excel-mcp inject_vba / build_xlsx 工具的設計依據。
Type
docs
要沉澱的內容(草稿大綱)
1. OPC 結構觀:.xlsx/.xlsm 是 zip,巨集只是一個成員
xlsx(zip) xlsm(zip)
├── [Content_Types].xml ──改──► workbook 型別改 macroEnabled + 宣告 bin Default
├── xl/_rels/workbook.xml.rels ─► 加一條指向 vbaProject.bin 的 relationship
├── xl/…(其他全部不動)
──加──► xl/vbaProject.bin(巨集本體)
xlsm − xlsx = 恰好三處:兩個 XML 宣告 + 一個二進位成員。注入器 = 逐 zip 成員 byte 複製 + 這三處手術。
2. vbaProject.bin 的來源工作流(不可無中生有)
- bin 是專有編譯容器(OLE + compressed source + p-code),無可靠開源生成器
- 工作流:
.bas(source of truth,pure ASCII per applescript-swift-parity 的編碼教訓)→ 真 Excel 匯入空白活頁簿 → 存 xlsm → 抽 xl/vbaProject.bin → 進 repo assets
- VBA 邏輯變更 = 重走一次抽取;bin 是 build artifact,bas 是 source
3. Byte 級保真驗證模式(注入器的測試契約)
- 條目集合 = 原集合 +
{xl/vbaProject.bin}(不多不少)
- 除兩個預期 XML 外,每個成員與來源 byte-identical
- 兩個被改的 XML:把預期改動還原後必須與原文完全相等(多改一個字元測試就掛)
- 注入的 bin 與 asset 逐 byte 相同
這種保證 Excel 自己的「另存」給不了(它重寫整個檔案結構)——是 zip 手術路線獨有的紅利。
4. 邊界聲明
- 不是繞過安全機制:產物是結構標準的 .xlsm,Excel 開檔照常跑巨集安全檢查
- 手術繞開的是 Excel GUI 存檔流程的坑(File Provider 路徑 -50、sandbox 授權 dialog、老式 form control 序列化失敗)
Expected
docs/opc-zip-surgery.md(暫名)進 macdoc docs;#135 的 inject_vba 工具設計引用它。
Impact
- che-excel-mcp 離線層(
build_xlsx / inject_vba / normalize_xlsx)的設計依據
- 同樣手術適用家族其他成員(docx/pptx 也是 OPC;巨集注入模式可平移 .docm/.pptm)
Refs #135
Priority
P2
Problem
#135 經驗清單第 2 條(「.xlsm 巨集注入(零 GUI)」)只有摘要;完整的原理與驗證方法論散在對話裡,應沉澱成 macdoc docs 設計論述(同
docs/applescript-swift-parity.md體例),並成為 che-excel-mcpinject_vba/build_xlsx工具的設計依據。Type
docs
要沉澱的內容(草稿大綱)
1. OPC 結構觀:.xlsx/.xlsm 是 zip,巨集只是一個成員
xlsm − xlsx = 恰好三處:兩個 XML 宣告 + 一個二進位成員。注入器 = 逐 zip 成員 byte 複製 + 這三處手術。
2. vbaProject.bin 的來源工作流(不可無中生有)
.bas(source of truth,pure ASCII per applescript-swift-parity 的編碼教訓)→ 真 Excel 匯入空白活頁簿 → 存 xlsm → 抽xl/vbaProject.bin→ 進 repo assets3. Byte 級保真驗證模式(注入器的測試契約)
{xl/vbaProject.bin}(不多不少)這種保證 Excel 自己的「另存」給不了(它重寫整個檔案結構)——是 zip 手術路線獨有的紅利。
4. 邊界聲明
Expected
docs/opc-zip-surgery.md(暫名)進 macdoc docs;#135 的inject_vba工具設計引用它。Impact
build_xlsx/inject_vba/normalize_xlsx)的設計依據Refs #135
Priority
P2