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)的設計依據
- OPC 的封裝觀念可作為 docm/pptm 的研究起點;各格式的 main part、content type、relationship、host binding 與 fixture 必須另案規格化及驗證,不得直接平移 xlsm 契約
Refs #135
Priority
P2
Current Status
Phase: verified
Last updated: 2026-08-13 by idd-verify
Delivered
Scope refinement
Blocking
Commits
33cca15 — initial contract
ca89009 — logic/security boundaries
a8901e7 — verification gaps
9b22acc / 11e6ab0 — descriptor semantics
554b8a8 — private staging trust boundary
Verify
Platform capability status
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
Current Status
Phase: verified
Last updated: 2026-08-13 by idd-verify
Delivered
docs/opc-zip-surgery.md:OPC delta、VBA provenance、document-module binding、byte fidelity、macro-alive 與安全/交易邊界。Scope refinement
codeNamedelta。Blocking
Commits
33cca15— initial contractca89009— logic/security boundariesa8901e7— verification gaps9b22acc/11e6ab0— descriptor semantics554b8a8— private staging trust boundaryVerify
Platform capability status
platform:cross;狀態為design-only;已驗證的是文件契約本身,feature: che-excel-mcp — 沉澱 Excel 自動化實戰(xlsx/xlsm 產生、VBA 注入、真 Excel 驗證)成 MCP server #135 尚未交付跨平台 runtime 實作或測試。platform:macos;狀態為design-only;只有 Excel for Mac 歷史觀察,精確 macOS/Excel 版本未記錄,repository 內無 live fixture。not-verified,不得由 OPC 格式知識外推。Phase: verified僅代表 docs: OPC zip 手術論述 — .xlsm 巨集注入、vbaProject.bin 工作流與 byte 級保真驗證 #136 文件交付通過 IDD verify,不代表 feature: che-excel-mcp — 沉澱 Excel 自動化實戰(xlsx/xlsm 產生、VBA 注入、真 Excel 驗證)成 MCP server #135 runtime 或 live Excel 能力已驗證。