一份現代的 .xlsx 活頁簿,其實是一個 ZIP 封裝檔,把原始圖片儲存在一個叫做 xl/media 的資料夾裡,因此每一張內嵌的圖片,其實都已經是一個獨立的檔案,等著被解壓縮並儲存下來。正是這一個結構性的事實,讓你不需要 Excel 本身、不需要截圖,也不需要把活頁簿上傳到第三方伺服器,就能把 Excel 工作表裡的圖片儲存下來。當你把一張圖片拖進某個儲存格、放進頁首,或是以浮動物件的方式貼上時,Excel 會把二進位內容寫進這個封裝檔中,並在別處記錄放置的相關指示。即使你之後刪除了這個圖案、編輯了圖表,或是換掉了視覺元素,這些圖片的位元組資料,仍然會保留下來。要儲存這些圖片,你只需要一個能打開這個封裝檔、列出 xl/media 底下有哪些內容,並把每一筆項目,都以可下載檔案的形式交還給你的工具。一個專為這個任務打造、在瀏覽器中運作的擷取工具,只要三次點擊,就能完成這件事,讓活頁簿留在你的裝置上,並讓每一個原始位元組都維持原樣,PNG 依然是 PNG、JPG 依然是 JPG。

how to save images from excel sheet
如何從 Excel 工作表中儲存圖片

為什麼 Excel 中的圖片不容易儲存

Excel 並沒有內建一個能像大多數使用者預期那樣運作的「匯出所有圖片」指令。另存新檔選單提供了 PDF、CSV 與網頁格式,但這些選項要嘛會壓平整個版面,要嘛就是擷取一份包含格線、圖表文字,以及你不想要的儲存格顏色的渲染畫面。在圖片上按右鍵,會出現「另存為圖片」,但這一次只能處理一張圖片,而且一開始就得先在桌面版 Excel 中打開檔案。對於內嵌了好幾十張照片、產品圖片或掃描檔的活頁簿來說,這種一張一張點擊的做法既緩慢又容易出錯。截圖的效果更糟:它會帶入格線、讓透明效果變模糊、把你鎖死在單一顯示解析度,還會裁掉躲在其他視窗後面的內容。這些方法,沒有一個能還原出原始的位元組資料,因此一張透明的 PNG,可能會變回一張沒有透明度的點陣圖,而一個類似向量格式的 EMF,也可能會失去它的縮放精確度。結果就是,活頁簿越大,這整套工作流程就越花時間,尤其是當這份檔案是同事分享給你的,而你手上根本沒有本機安裝的 Excel 時,情況更是如此。

.xlsx 封裝檔如何把你的圖片藏起來

這是大多數使用者從來不會看到的部分。一個 .xlsx 檔案,其實是一個 Office Open XML 封裝檔,也就是一個由 ECMA-376 標準 所定義的 ZIP 封存檔,它會依照一套嚴謹的目錄結構,把工作表、樣式、繪圖與媒體資料,全部打包在一起。內嵌的圖片,會以一般二進位檔案的形式,存放在 xl/media 裡,檔名使用的副檔名,和它們一開始被插入時相同,例如 image1.png、photo42.jpeg,或 logo.emf。另外還有一個獨立的 XML 元件,記錄著每一張圖片放在哪裡、如何被裁切,以及它屬於哪一個圖案。這樣的封裝設計,代表擷取工具不需要剖析工作表的數值、執行任何巨集,也不需要渲染整個檔案,就能還原出圖片的位元組資料。Microsoft 的 Open XML 文件 描述的正是同一套封裝模型:媒體檔案,是被繪圖元件參照的,但它們的內容,是獨立儲存的,因此任何遵循這套標準的工具,都能把它們原封不動地讀回來。這正是讓一個純瀏覽器工具能夠成立的基礎。因為這種封裝格式是公開且有完整文件記載的,一個謹慎設計的工具,就能完全離線運作,卻依然能產出與 Excel 本身所儲存的內容,逐位元組完全相同的結果。

三個步驟從 Excel 工作表中儲存圖片

整個流程只需要三個簡短的步驟,而且每一步,都在你自己的裝置上完成。

  1. 在瀏覽器中打開 Extract Images from Excel 工具,點擊檔案選擇器。從你的裝置中選擇一份 .xlsx 活頁簿。這個檔案絕不會離開你的機器,因為瀏覽器會在你的分頁中,於本機完成所有的解壓縮工作。
  2. 稍等片刻,讓瀏覽器驗證 ZIP 的中央目錄,並讀取活頁簿 xl/media 資料夾中受支援的檔案。完成之後,你會看到一份清單,列出這份活頁簿包含的每一張內嵌圖片,並保留原始檔名。
  3. 下載你需要的圖片。點擊單一項目,即可把一張原始圖片儲存到你的裝置上;或是使用 ZIP 選項,把所有還原出來的圖片,收進單一個封存檔中,供你之後解壓縮。

整個流程完全在本機完成:活頁簿在你的瀏覽器中解壓縮,ZIP 會先經過驗證,才會解壓縮任何內容,而 JSZip 這個函式庫,也是等你選好檔案之後才會載入。過程中不會有任何伺服器上傳、不會有任何轉換步驟,也不會對原始圖片重新壓縮。每一個可下載的檔案,都是 Excel 原本儲存在封裝檔中的同一份圖片內容。

這個擷取工具能還原什麼,又會留下什麼

對這類工具來說,誠實揭露範圍,比一份很長的功能清單更重要。這個擷取工具,會讀取 xl/media 裡受支援的檔案,並原封不動地匯出每一筆項目。它不會在畫布上重新繪製圖片、不會轉換格式,也不會套用任何視覺效果。如果一份活頁簿不含任何內嵌的圖片內容,這個工具會直接告訴你,而不是從圖表或儲存格範圍中,硬生生地捏造出什麼東西。它也不會讀取工作表的數值、公式、巨集、註解、命名範圍,或是控制圖片放置位置的 XML。下表整理了最常見的活頁簿內容,以及這個工具依照 ECMA-376 所定義的 Office Open XML 版面配置,實際上會如何處理它們。

活頁簿內容能否還原成可下載的檔案?
儲存在 xl/media 中的圖片檔案(PNG、JPG、GIF、EMF、WMF)可以,會原封不動地匯出
依據工作表資料繪製的即時圖表物件不行,是以 XML 繪圖指令的形式儲存
條件式格式設定圖示集不行,是以 XML 繪圖指令的形式儲存
依資料建立的儲存格填色、圖案或繪圖不行,是以 XML 繪圖指令的形式儲存
僅以 URL 參照的外部圖片不行,並非封裝檔的一部分
舊版 .xls(二進位)活頁簿這個工具不支援
受密碼保護的 .xlsx 封裝檔這個工具不支援

這個範圍是刻意設定得很窄的。一個封裝檔,也可能保留著一個已經不再顯示在工作表上的媒體項目,因此還原出來的清單,可能會包含一張你在 Excel 中打開活頁簿時看不到的圖片。Microsoft 在它的 Open XML 參考文件中,也記載了同樣的行為:媒體元件的存在,獨立於繪圖元件之外,甚至可能比原本使用它的圖案還要「長壽」。請把這份清單,當成內嵌檔案的忠實庫存清單,而不是目前可見內容的地圖。這個工具,也會針對封存項目數量與展開後的資料大小,強制執行封裝檔的限制,因此超出這些限制、格式錯誤、使用不受支援的 ZIP64 目錄欄位,或不含任何受支援媒體的活頁簿,會被明確說明原因後直接拒絕,而不是被部分解壓縮。

這項工具能派上用場的常見活頁簿情境

確實有好幾種真實情境,讓從 Excel 工作表中儲存圖片,勝過任何其他方法。一份用 Excel 建立的產品型錄,可能在單一欄位中,就放了好幾十張 SKU 產品照片,手動重新輸入每一個檔名,是很脆弱的做法,因為只要重新命名錯一個,就可能弄壞下游的匯入流程。一份銷售儀表板,可能包含一張曾經被另存成圖片、以保留特定渲染效果的圖表,而現在重複使用這張原始圖片,會比從頭重建這個圖表更容易。一份報告範本,頁首可能帶有公司標誌,而行銷團隊需要更高解析度的版本,用於印刷,但活頁簿本身,卻只儲存了一份縮小版的副本。一份掃描過的庫存清單,可能同時混雜著拍照留存的行列與手動輸入的數值,而下一步工作流程,只在意那些照片,因此不去動用儲存格文字,能省下不少時間。在每一種情況中,Excel 活頁簿都是版面配置的真相來源,但當你只想要原始的圖片資料時,它反而會變成一種干擾。一個在本機運作的擷取工具,能把這份活頁簿,變成一個裝滿圖片檔案的資料夾,讓你可以直接拿去用在其他工具上,而不會遺失來源工作表,也不需要把它傳到任何地方。

擷取之後:檢查並重複使用這些檔案

圖片一旦到了你的裝置上,快速檢查一遍,能保護你後續的整個工作流程。在刪除活頁簿之前,先把每一個還原出來的檔名,和來源工作表比對一下,因為這個工具保留的是檔案本身,而不是它們的位置。用任何一種圖片檢視器打開這些原始檔案,確認解析度、色彩描述檔與透明度,是否符合你的預期。像 EMF 與 WMF 這類 Office 原生格式,雖然可以還原成它們原本的檔案,但其他應用程式能不能預覽或編輯它們,取決於那個應用程式對格式的支援程度,而不是這個擷取工具本身。接下來,你可以把還原出來的檔案,導入其他相關的瀏覽器端輔助工具:透過 Image Compressor 批次處理一大批檔案來縮小檔案大小、用 WebP Converter 轉換格式,或用 Image to PDF 把好幾張還原出來的圖片合併成一份 PDF。一切都會留在本機,因為每一個步驟,都在同一個瀏覽器分頁中執行。請把原始的 .xlsx 檔案,和解壓縮出來的資料夾一起保留,作為備用,因為這份活頁簿,仍然擁有版面配置、公式,以及這個擷取工具刻意不去動用的圖片放置中繼資料。這份備用檔案,同時也是核對每一個還原出來的檔案,在原本情境中應該長什麼樣子的最乾淨的方式。

若想深入了解,請參閱 Turn an Animated GIF Into Individual PNG Frames Locally

若想深入了解,請參閱 How to Rotate an Image in Lightroom Classic (or Locally)