← ClaudeAtlas

xlsx-surgerylisted

Excel/xlsx(OOXML)檔案的外科手術式編輯物理法則。用於任何要「改一個既有 xlsx 的少數格/結構、又必須保住其餘一切(公式、樣式、圖表、樞紐、外部連結)」的工作:為什麼不能用函式庫整檔重寫、做最小字串/ZIP 切口、五個「真 Excel 會拒開、但寬鬆工具看不到」的檔案級地雷怎麼避,以及讀取數百 MB 大工作表不爆記憶體的串流物理(50 倍記憶體定律、磁碟點查、禁整頁物化)。
poloplay0114/hard-won-claude-skills · ★ 0 · Data & Documents · score 67
Install: claude install-skill poloplay0114/hard-won-claude-skills
# xlsx 外科手術(xlsx Surgery) ## 什麼時候用 任何時候你要**改一個既有的 .xlsx**,而且要求「只動我指定的那幾格/那塊,**其餘全部一位元不差**」—— 尤其原檔含**公式、精細樣式、圖表、樞紐表、外部連結**這些「用函式庫重載會被動壞」的東西。 xlsx 是一個 zip 包著一堆 XML part 的格式;天真地「載入→改→存回」會**靜默破壞你根本沒碰的部分**。 這技能是那些破壞的地雷圖 + 避法。 ### ★觸發紀律(什麼時候「必須」對照本技能) **觸發時機不只是「當你動手寫 xlsx 操作碼時」,而是「任何碼路徑會碰到 xlsx 交付物的任何時刻」**—— 這包含**接既有模組**,不限新寫碼。真實事故:法則 1/3/7 白紙黑字都在,卻因為只把「產出交付檔」 接上一個**既有的**函式(它內部偷偷 `load_workbook`+`wb.save` 整檔重存),圖表照樣被毀——因為 沒人在「接線那一刻」把這條既有路徑對照法則過一遍。 **硬紀律(兩條,寫進計畫、交付前必跑):** 1. **接線前對照**:凡任何碼路徑會對 xlsx 交付檔做**寫入 / 轉存 / 搬運 / 另存**(**含呼叫既有模組**), 在接它之前先把它對照**法則 1–7 過一遍**,把「這條路徑用 ZIP 手術還是整檔重寫」寫進計畫。 既有函式的名字取得再無害(`append_source`/`build`/`save_as`…),也要打開看它內部**到底怎麼寫檔**。 2. **出口自檢必跑**:交付前跑**法則 3 的出口自檢**——拿真 Excel(或位元/圖表-parts 級對照原檔) 驗「開得了 + 圖在 + 結構等值」。寬鬆工具(openpyxl/LO)的綠**不算**通過。 --- ## 核心物理法則 ### 法則 1:最小切口——只改目標,絕不整檔/整頁重寫 主流函式庫(如 openpyxl)「載入整個工作簿再存���」會**重新序列化每一個 part**——它不認得的東西 (某些圖表、樞紐、外部連結、少見的 namespace)可能被丟失、降級或改寫。**外科手術式**: - 只對**目標 part**(某個 worksheet XML)做**字串級精確定位取代**,其他 part **原封搬運**(ZIP 級 copy)。 - 換一個 sheet 就只換那一個 part 的 bytes,別重打包整個工作簿。 - **絕不 parse 整頁的根標籤**(見法則 2 的 namespace 雷)。 ### 法則 2:五個「真 Excel 拒開、寬鬆工具看不到」的檔案級地雷 以下每一個,**openpyxl / LibreOffice 重載都容忍(顯示正常=假綠)**,只有**真 Microsoft Excel 開** 會踩到(典型症狀:「檔案損壞、要修復」、part XML error `0x808c0002`「行1欄0」)。 1. **整樹 parse 毀 namespace**:用 XML 樹工具(如 ElementTree)parse 整頁 worksheet 再寫出 → 它會把命名空間前綴**改名**(如 `mc:`→`ns1:`),又把它「以為沒用到」的 namespace 宣告當垃圾**刪掉** ——但那個宣告其實被**某個屬性的『值』**引用著(如 `mc:Ignorable="x14ac"`,`x14ac` 是屬性值裡的 前綴,樹工