
「將 Excel 資料轉換為 CSV」實際上代表什麼
將 Excel 資料轉換為 CSV 指的是從一個 .xlsx 活頁簿的單一工作表中讀取儲存的值,並將每一列寫成一筆以逗號分隔的記錄,以便另一支程式能逐行解析。
對開發者而言,這很少是一次性的任務。CSV 是餵入關聯式資料庫、REST 端點、記錄分析器、ETL 作業,以及早於試算表軟體的舊式批次匯入工具的通用語言。其取捨在於 CSV 只能攜帶值,而無法攜帶讓活頁簿有用的結構:它沒有欄位型別、沒有公式、沒有圖表,也沒有格式設定。每個接收該檔案的消費者都必須以您寫入時相同的方式來解讀位元組。
這就是為何匯出步驟很重要。一個可預期的匯出工具會明確標示換行字元 (CRLF)、明確標示跳脫規則(逗號、引號與換行),以及明確指出哪些儲存格會成為空欄位,哪些儲存格會在最前面加上某個字元,以防止接收端的試算表把文字誤判為公式。一個可預期的匯出工具同樣會拒絕在瀏覽器中讀取活頁簿時執行其公式、巨集或外部連結。
為何開發者選擇本機瀏覽器工具,而非線上轉檔服務
線上試算表轉檔服務雖然方便,但其中大多數會將活頁簿上傳到伺服器、在記憶體中保留一段時間,有時還會把下載連結以電子郵件寄回給您。對於一份含有客戶資料、財務數字或員工編號的檔案而言,這趟來回就是一個您無法稽核的隱私事件。本機瀏覽器工具則完全避開了這趟來回:您挑選的檔案會在當前的瀏覽器分頁內開啟、工作表的值會在記憶體中讀取,而 CSV 會以單一可下載 Blob 的形式提供。
這也涉及掌控權的考量。當轉檔發生在您看不到的伺服器上時,您必須信任其跳脫規則、對公式儲存格的處理方式,以及日期與地區的推測結果。當轉檔發生在您自己的瀏覽器分頁中時,您可以用純文字編輯器開啟匯出的檔案,逐位元組檢查。若結果與您管線中的預期不符,您只需修改來源中的某個儲存格並重新轉檔,整個過程中不會發生任何上傳。
瀏覽器工具同樣符合桌面軟體所無法提供的開發者使用體驗:不需要安裝程式、不需要管理者權限、不依賴特定作業系統,也不會在您關閉分頁後留下殘留的背景服務。在建置、程式碼審查或資料庫遷移之前需要快速萃取資料時,這種摩擦感是很重要的。
CSV 保留與捨棄的內容
CSV 會保留選定工作表中字串、數字與布林值的儲存值。每一個顯示的列會成為一筆 CSV 記錄。空白儲存格會成為 CSV 中的空欄位。記錄之間以 CRLF 換行字元分隔,任何含有逗號、雙引號或換行的欄位,都會依照大多數解析器所預期的 RFC 4180 慣例進行跳脫。數字(包括負數)會以一般數值文字寫入,以便接收程式自行決定要將其解析為整數、小數或貨幣。
若字串的第一個有效字元屬於四個公式觸發字元之一 — 等號、加號、減號或 @ — 其在匯出的 CSV 中會在最前面加上一個單引號。這是一個刻意的安全轉換:試算表應用程式在開啟 CSV 時,經常會把以這些字元開頭的文字解讀為公式,而這是已知的公式注入攻擊向量。單引號代表「將此視為文字」,接收端的試算表可能會顯示它或保留它,這取決於其匯入規則。若您的下游系統將開頭的單引號視為商業資料的一部分,請檢視匯出結果。
CSV 會捨棄所有它無法表示的內容。這份清單很長,值得牢記:
| CSV 中保留的內容 | 從活頁簿中捨棄的內容 |
|---|---|
| 儲存的字串、數字、布林值 | 工作表名稱、分頁顏色、分頁順序 |
| 以空欄位表示的空白儲存格 | 公式、已定義名稱、外部連結 |
| CRLF 換行字元 | 儲存格格式、數字格式、字型 |
| RFC 風格的逗號與引號跳脫 | 圖表、影像、繪圖物件、註解 |
| 在公式觸發字串前加上單引號 | 篩選、驗證規則、合併儲存格的語意 |
| 每次匯出一個工作表 | 列印設定、頁面配置、頁首與頁尾 |
| 巨集、VBA、自訂 XML 部件、樞紐快取 |
有一個結果值得單獨說明:日期值可能會保留為儲存的數值,因為該工具不會猜測地區或日期格式。若目的端應用程式將 45292 解讀為序列日期,那是它的慣例,而非此工具的慣例。
如何在瀏覽器中將 Excel 資料轉換為 CSV
在您的瀏覽器分頁中開啟 Excel To CSV 工具。該頁面會在本機讀取並匯出活頁簿,因此後續的工作流程都會在您的機器上完成。
- 挑選一個不超過 20 MB 的本機 .xlsx 活頁簿。檔案選擇器只接受本機檔案系統;遠端 URL、舊版 .xls 檔案、啟用巨集的格式以及加密封裝皆不支援,並會以錯誤訊息拒絕處理,而不是默默截斷。
- 選擇您要匯出的工作表。此工具每次下載只匯出一個工作表。若您的活頁簿中有多個工作表都想分別匯出為 CSV 檔案,請對每個工作表重複執行匯出。
- 點擊 Convert to CSV。瀏覽器會讀取工作表的儲存值、以 CRLF 換行字元建構 CSV 文字、套用 RFC 風格的跳脫規則、在公式觸發字串前加上單引號,並將結果包裝成單一可下載的 Blob。
- 將下載的檔案儲存到已知的位置。請使用清楚明確的檔名,讓您管線中的下一個工具無需猜測就能找到它。下載的檔案是純文字;若您的瀏覽器沒有自動加上副檔名,請將其重新命名為 .csv。
- 在目的端應用程式中先開啟該檔案一次,再分享出去。請確認分隔符號、前置零、日期解讀方式,以及您預期出現單引號前綴的位置。這是抓出問題成本最低的環節。
對於非常大的工作表,請選擇最小的相關工作表並僅轉檔該工作表。原本的 .xlsx 絕不會被覆寫,因此您可以重複以不同的工作表,或以一份剛清理過的活頁簿副本進行匯出,而不會遺失資料。
您會遇到的限制(以及它們為何不會悄悄發生)
一個會悄悄把一百萬列的工作表截斷成前 50,000 列的資料匯出工具,比沒有工具更糟,因為消費該檔案的管線無法偵測到資料的遺失。Excel To CSV 工具會強制執行嚴格的瀏覽器端限制,並在任一限制被超出時回傳明確的錯誤訊息。其取捨在於您無法將無限制的活頁簿塞進去;其好處則在於錯誤訊息會明確告訴您該修正什麼。
| 限制項目 | 數值 | 超出時會發生什麼事 |
|---|---|---|
| 活頁簿大小 | 20 MB | 在解析之前就拒絕該活頁簿 |
| 選定工作表上的儲存格數 | 100,000 個定址儲存格 | 拒絕該工作表,不產生部分 CSV |
| 產生的 CSV 大小 | 10 MB | 中止匯出,不產生部分 CSV |
| 封裝格式 | 僅限傳統 .xlsx OOXML | 舊版 .xls、啟用巨集、加密檔案、遠端 URL 一律拒絕 |
| 封存結構 | 單片磁碟、非 Zip64 封裝 | 多片磁碟與 Zip64 封裝一律拒絕 |
| 輸出範圍 | 每個 CSV 一個工作表 | 其他工作表不會被默默合併 |
由於項目數與宣告展開大小的檢查會在解析之前進行,因此惡意建構的封裝無法在瀏覽器分頁解壓縮時耗盡其記憶體。錯誤訊息會直接顯示在使用者介面上,而不是以頁面卡住或部分下載的方式呈現。
當 CSV 是錯誤的交換格式
當消費者是文字解析器、資料庫載入器,或是希望每行一筆記錄並樂於自行解讀型別的記錄彙整工具時,CSV 就是正確的格式。當資料具有逗號無法承載的結構,或是接收端工具預期瀏覽器能直接呈現的內容時,CSV 就是錯誤的格式。
巢狀物件、儲存格內的陣列,以及鍵值對應的資料,會被 CSV 攤平或摧毀。若您的工作表在某個儲存格中儲存了 JSON,或以重複的列來表達一對多關係,那麼 Excel to JSON 工具能產生保留巢狀結構的格式。若目的端是網頁或應直接呈現表格的 UI 元件,HTML 表格會比 CSV 更接近目標,並且 CSV 也能透過一個有界、不上傳的管線在瀏覽器中轉為 HTML。
CSV 同樣無法承載公式、格式設定,或是任何讓試算表在編輯上更有用的活頁簿功能。若下一位使用者需要繼續在 Excel 中作業,且只需要一份較小的活頁簿副本,那麼匯出為另一個 .xlsx 格式才能保留儲存值與工作表結構,而這是 CSV 做不到的。
分享 CSV 前的驗證檢查清單
在把檔案交給其他人之前,請先用純文字編輯器開啟匯出的檔案一次。請確認換行字元看起來是 CRLF,確認每個含有逗號的欄位都被雙引號包圍,並確認沒有遺留未閉合的內嵌引號。請快速瀏覽一遍,看看是否有任何儲存格以單引號開頭,並確認該原始儲存格確實是以四個公式觸發字元之一開頭。這短短一分鐘就能抓出日後出現的大部分整合錯誤。
接著在目的端應用程式中開啟該檔案,並檢查四個屬性:分隔符號(依地區而定可能是逗號、分號或 Tab)、編碼(取決於消費者是否使用帶 BOM 的 UTF-8)、前置零(除非該欄位被加上引號,否則 CSV 會將其捨棄),以及日期解讀方式(此工具不會為您挑選地區)。若其中任何一項與目的端預期不符,請修正來源活頁簿並重新轉檔。
最後,請保留原始的 .xlsx 作為資料的真相來源。CSV 只是一個交換用的產物;活頁簿才是具權威性的文件。若下游消費者需要了解公式原本是什麼、儲存格格式為何,或某個儲存格為何是空白,答案就在您最初那份活頁簿中。
若想更深入了解,請參閱 How to Convert HTML Table Data to Excel in Your Browser。
若想更深入了解,請參閱 How to Convert Excel to JSON File for ITR Filing。