在 Google Sheets 中移除空白字元,意思就是把多餘的空格、Tab、空白行,以及不可見的 Unicode 字元縮減掉,讓每個儲存格只保留它應該有的文字。最乾淨的做法,就是不要只依賴一個「移除空格」的想法,因為這個說法可以指壓縮多餘的空格、刪除空白列,或是刪除所有空白字元,而每個目標各自需要不同的模式。一份貼上來的姓名表格、一段匯出的散文段落、以及一串以逗號連接的代碼,當空白被錯誤地移除時,損壞的方式都不一樣。正確的解法是在一個瀏覽器型工具中挑選三種明確模式之一,先預覽完整的輸出結果,再把清理過的文字貼回試算表。

大多數多餘的空白,來自於從 PDF、電子郵件、網站以及 CSV 匯出內容的複製。Google Sheets 會透過 TRIM 與 SUBSTITUTE 等內建函式處理一部分,但這些公式會漏掉不中斷空格 (U+00A0)、Windows 與 Mac 複製之間的 CR/LF 差異,以及貼上時夾帶的 Tab。若要得到精確的結果,你需要一個會明確揭露「空白字元」定義的工具,而不是把定義藏在一顆按鈕後面。

how to remove whitespace in google sheets
如何用三種模式在 Google Sheets 中移除空白字元

為什麼貼上的資料總是帶著多餘的空白

貼上的試算表資料很少是乾淨的。當你從網頁、PDF 或 CRM 匯出複製一份表格時,每個儲存格都會夾帶來源所使用的分隔字元,而那個分隔字元常常是 Tab 字元、雙倍空格,或是用來讓文字視覺上保持在一起的不中斷空格。在 Google Sheets 儲存格裡,這些字元看起來都跟普通空格一模一樣,這也是為什麼在破壞下游公式之前,這種損壞的排版很難被察覺。

最常出現的三大元凶:

  • 重複的空格,來自純文字匯出中的欄位對齊。
  • Tab 字元,來自複製原本以分隔符號區隔的儲存格。
  • 不中斷空格 (U+00A0),來自從文書處理器和 HTML 頁面複製出來的格式化文字。
  • 空白行,來自貼上時遺失段落標記的段落。

每一種都需要不同的處理方式。要判斷你的資料中藏著哪一種,最快的做法是在清理前後,查看單一儲存格的字元數。如果數字下降了,但實際上沒有任何字元真的消失,那就是有看不見的空白字元。一旦知道元凶是誰,就可以挑選一個只處理它、卻不會動到你真正想保留的空格之模式。

三種空白模式,並排比較

瀏覽器版的 Whitespace Remover 提供了三種刻意不同的模式,而不是一顆模稜兩可的「移除空格」按鈕。每一種各自對應不同的下游格式,仔細閱讀模式名稱,能避免你不小心把字詞合併或把段落壓平。模式標籤和輸出預覽會把實際的轉換明確顯示出來,所以你在畫面上做的選擇,就是實際執行的選擇。

模式 它改變了什麼 它保留什麼不動 最適合
壓縮水平空白 每一行中,連續的空格、Tab 以及其他水平空白會變成單一空格。換行旁邊的空格會被刪除。CRLF 會標準化為 LF。整個結果會被去頭去尾。 段落之間的換行,以及刻意保留的空白行。 貼進單一儲存格的散文、段落、描述與長篇註記。
去除每行頭尾空白並移除空白行 每一行的頭尾都會被去除;空行會被刪除。剩下的行會以單一 LF 重新串接。 每個非空行的內部空白。 清單、複製來的表格、記錄檔,以及應該每行一個值的貼上註記。
移除所有空白字元 凡是符合 JavaScript 具備 Unicode 感知能力的空白字元類別的所有字元,都會被刪除,包括普通空格、Tab、換行字元以及不中斷空格。 沒有任何與空白相關的內容會留下來。 代碼、ID,以及任何空白都會破壞格式的嚴格機器輸入。

讀懂這張表,是把段落「清理乾淨」與把段落「撕成碎片」之間的差別。壓縮模式是散文的預設;去除行模式是清單的預設;全部移除模式只用於極少數「只要出現任何空白就是錯誤」的情況。選錯模式,是「清理過」的貼上內容看起來反而比原本更糟的最常見原因。

如何在 Google Sheets 中移除空白字元

Google Sheets 內建兩個原生選項:TRIM 函式,負責移除開頭、結尾以及重複的普通空格;以及一連串的 SUBSTITUTE 呼叫,可以指定要處理的字元。兩者都能運作,但當貼上的內容來自非 Google 來源時,各自都有重要的不足之處。

Sheets 原生做法 它能抓到什麼 它會漏掉什麼 備註
=TRIM(A1) 開頭空格、結尾空格,以及重複的內部空格 (U+0020)。 不中斷空格 (U+00A0)、Tab (U+0009)、其他 Unicode 空白字元。 輸出結果保留在試算表內。最適合單一儲存格中的普通散文。
=SUBSTITUTE(A1, CHAR(160), "") 單一指定字元,例如 U+00A0。 除非再串接一層 SUBSTITUTE,否則其他所有空白字元都會漏掉。 適用於在 TRIM 之後、已知含有不中斷空格時的後續處理。
資料 → 移除空白字元 所選範圍內的開頭與結尾空格。 內部重複空格、Tab、不中斷空格、換行字元。 內建選單指令。比公式輕量,但涵蓋範圍仍然有限。
先透過 Whitespace Remover 貼上 視所選模式而定,可處理空格、Tab、換行字元、不中斷空格、CRLF、空白行。 所選模式本就不應處理的內容之外,不會漏掉任何東西。 在另一個分頁中執行,再把清理過的值貼回儲存格。當 TRIM 與 SUBSTITUTE 都還留下痕跡時特別有用。

當資料放在 Google Sheets 時,實際的工作流程是:

  1. 用 Ctrl+C(Mac 上用 Cmd+C)從 Google Sheets 複製混亂的儲存格。
  2. 在另一個瀏覽器分頁中開啟 Whitespace Remover。
  3. 把複製的文字貼進輸入區。
  4. 挑選符合資料呈現樣貌的模式:散文用壓縮、清單(每行一項)用去除行空白、代碼才用全部移除。
  5. 檢視清理後的輸出與結果下方顯示的長度計數。
  6. 複製清理過的文字,透過 編輯 → 選擇性貼上 → 僅貼上值 貼回原本的 Google Sheets 儲存格或範圍,以丟掉任何公式痕跡。

如果想進行另一項相關的 Google Sheets 清理工作(包含姓名順序調換),請參考 一鍵在 Google Sheets 中交換姓與名。當來源是 CRM 匯出時,這兩項任務常常一起出現,而同樣的「貼上 → 清理 → 貼回」模式就能同時處理兩者。

使用 Whitespace Remover 清理貼上內容

一旦決定哪種模式適合你的貼上內容,實際的清理步驟很短。整個工具都在你的瀏覽器分頁中執行,所以試算表的內容不會離開你的電腦,也不會有任何資料被送到伺服器。

  1. 把想要清理的純文字貼上或輸入到輸入框中。
  2. 選擇模式:散文用 壓縮水平空白,清單用 去除每行頭尾空白並移除空白行,代碼用 移除所有空白字元。
  3. 按下 清理文字,然後閱讀輸出面板以及旁邊顯示的 code-unit 計數。
  4. 如果輸出符合預期,按下 複製,把清理過的文字貼回試算表儲存格、範圍或下游檔案。
  5. 如果瀏覽器封鎖了剪貼簿動作,頁面會顯示該情況,並保留完整唯讀輸出供你手動選取與複製。

兩個小習慣能避免大多數錯誤。第一,在假設舊的結果仍然有效之前,先變更輸入或模式;只要任一項改變,工具就會清掉過時的輸出,所以切換後不會留下舊的預覽。第二,記住顯示的計數是 JavaScript UTF-16 code-unit 計數,而不是位元組或可見字元數;表情符號與某些古老文字系統會佔用一個以上的 code-unit,因此數字是確定性的,但並不等同於字素 (grapheme) 數。

安全地讀取計數與預覽

結果面板會回報兩個數字:本次轉換移除了多少 UTF-16 code-unit,以及最終輸出的長度。移除數是一個很好的合理性檢查。如果你貼了一段含有四個雙倍空格與一個結尾空格的段落,而面板顯示移除了五個 code-unit,你就會確切知道壓縮模式做了什麼、而且只做了這些。

如果數字與預期差很多,請不要把結果貼回 Sheets。重新檢查模式、輸入,以及確認你到底是想合併還是修剪。相同的輸入與模式永遠會產生相同的字串,所以出現意外的數字,就代表設定在你不注意的時候被改過了。

即使是空的清理結果,也會以長度為零的方式顯示,而不是被誤認為失敗。當貼上的內容本來就只有空白時,這一點很重要;零結果代表工具確實執行了該模式描述的動作,而不是當機或卡住。

想了解為什麼計數可能與預期不同,可以參考 MDN 的字元類別跳脫參考文件 中記錄的 JavaScript \s 字元類別,它涵蓋的範圍比多數試算表使用者預期的更廣,包括不中斷空格與換行字元。工具在「全部移除」模式中正是依賴這個類別,所以可見的行為與文件說明一致。

當空白是資料且應保持原樣時

並非每個空白字元都是垃圾。在原始碼、YAML、Python、由縮排驅動的設定檔、固定寬度資料表,以及大多數法律文件中,空白與換行都承載著意義。使用全部清除模式將其移除,會導致腳本編譯錯誤、YAML 解析錯誤,或破壞固定寬度匯出檔案的欄位對齊。即便是合併模式,也可能會壓平程式碼檔案所依賴的縮排。

對於這類輸入,請將預覽視為檢查點,而非通行許可。若輸出仍保有該格式所需的縮排與換行,請將其貼回。若輸出壓平了該格式所依賴的某些內容,請改用支援格式的編輯器,或參考 MDN 上記載的 String.replace 規則,自行撰寫更精準的轉換。

若唯一的問題在於換行本身,而周圍的空白應保持完整,本網站上的專屬換行工具是更狹窄的替代方案。它能標準化或移除換行符,卻不會修剪空白或合併定位字元,這更貼近承載語法格式的實際需求。

若您正在權衡各種選項,為文字加上行號:設定與輸出速查表對此有詳細說明。