要在 Google Sheets 中可靠地從文字中移除變音符號,做法是複製該欄,貼到一個瀏覽器型工具中(該工具結合了 Unicode NFD 正規化與一份明確的折疊對照表,用以處理 Unicode 無法分解的字母),然後把清理後的結果貼回工作表。一鍵式工具勝過一連串公式,原因很簡單:Google Sheets 沒有內建函式可以處理 ø、ł、đ、ß、þ 以及其他十幾個相關字母,因為 Unicode 將這些字元視為獨立字母,沒有可去除的分解。即使執行 =REGEXREPLACE(A1, "[̀-ͯ]", "") 之後,含有 Łódź 的儲存格仍然是 Łódź,因為該正則表達式所瞄準的組合記號類別,正好是 ł、ø 和 đ 所缺少的。從文字中移除變音符號這項工具把標準的「正規化後去除」步驟與一份有文件記載的折疊對照表搭配在一起,用獨立的開關處理 æ → ae、ß → ss 等真正的音譯轉換,並且完全不碰非拉丁文字,讓共用同一列的希臘文、西里爾文、中文與表情符號得以逐位元組完整保留。

為何內建的工作表函式只能完成一半的工作
Google Sheets 內建了一套豐富的文字工具組,但其中幾乎沒有一個是專為清理變音符號而設計。CLEAN() 只會移除非可列印的控制字元。UPPER()、LOWER() 和 PROPER() 會原封不動地保留變音符號。TRIM() 只會壓縮空白字元。最接近的原生做法是 SUBSTITUTE(),常見的作法是一長串巢狀鏈,把 é 換成 e、è 換成 e、ê 換成 e、ë 換成 e,就這樣逐一處理你記得的每個帶變音符號的字母。對於少量法文與西班牙文這還行得通,但只要超過五六個替換就會變得難以閱讀,而且會靜悄悄地略過任何在嚴格 Unicode 定義下不算帶變音符號的字母。
REGEXREPLACE() 搭配 Unicode 屬性類別或組合記號範圍,可以更乾淨地處理同一族字元,這也是大多數以公式為基礎的教學所推薦的做法。它能抓到 é、ç、ñ、ü、ö、à 及其同類字元,因為這些字元要不是能被 NFD 正規化拆成基底字母加上組合記號的預組字元,就是已經含有組合記號的序列。它無法、也不可能抓到那些對英文使用者像是有變音符號、但 Unicode 並不視為變音符號的字母:ø、Ø、đ、Đ、ł、Ł、ħ、、ŧ、Ŧ、無點 i ı、ð、Ð,以及北歐與拉丁的連字 æ、œ 與 ß。Unicode 字元資料庫對這些字母都未登錄任何分解,因此僅靠正規化會原封不動地放行,不管公式多麼巧妙,Łódź 始終都會是 Łódź。
結果就是一個熟悉的模式:通訊錄、產品目錄或地理資料集的前 80% 都能順利清理,剩下的 20% 則是一場緩慢、需要人工搶救的任務,任何公式都無法完成。
真正能發揮作用的工作表到瀏覽器工作流程
處理試算表清理的務實模式,是別再在工作表格內苦戰,把那個一團亂的欄位搬到專為此工作而生的工具中。完整流程很短:在 Google Sheets 中選取該欄或範圍,複製,貼到工具中,點一下,複製清理後的輸出,在覆寫原始資料前貼回新的一欄做對比。貼到新的一欄而不是直接覆寫來源,讓你可以用肉眼核對工具回報的變更次數,並在發現任何問題時只要一步復原就能撤銷;當你唯一的副本藏在公式鏈中時,這就難上許多。
該工具單次貼上最多可接受一百萬個字元,且以單一線性方式處理,因此就算是擁有數萬列的通訊錄也能立即回傳結果。由於這項操作具備等冪性,你可以把同一段文字再跑一次,得到完全相同的輸出,這讓「貼上—清理—貼上」的循環在反覆調整設定時可以放心重做。像 café 這種以單一碼位輸入的預組文字,以及以 café 輸入的分解文字,會產生相同的結果,因為工具會在回傳前將輸出重新組合成 NFC。當你的工作表從某個資料庫匯入某一種形式,而你的貼上目標預期的是另一種形式時,這個細節就很重要。
三分鐘內在 Google Sheets 儲存格中移除變音符號
- 在 Google Sheets 中選取含有變音或特殊拉丁文字的範圍,按下 Ctrl+C(macOS 上為 Cmd+C),複製前先在資料編輯列中確認選取範圍,以免空白尾端儲存格被一起帶進貼上內容。
- 將複製的文字貼到「從文字中移除變音符號」工具的輸入區。整個過程都在你的瀏覽器中完成,不會上傳到任何伺服器,也不會與任何帳號綁定儲存。
- 決定像 ß、þ、æ、œ 這類連字與特殊字母是否應該展開為兩個字母(多數資料清理任務的預設為開啟),或是保持原樣;同時決定非拉丁文字是否應保持不動(預設)或為了產生嚴格的 ASCII 輸出而被去除。
- 點擊「移除變音符號」按鈕,並觀察按鈕旁的變更次數。這個數字會精確告訴你有多少字元被修改,當你想確認一個 5,000 列的欄位是否真的如預期被清理乾淨時,非常有用。
- 從輸出區複製清理後的結果,貼到 Google Sheets 中一個新的欄位,與原始資料並排,讓你能在刪除來源之前逐列抽樣檢查。
工具會移除、折疊與保留哪些內容
你的文字會經過三類轉換,每一類都有明確的規則。變音符號去除會從帶變音的拉丁字母中移除記號,讓 café 變成 cafe、señor 變成 senor、Zürich 變成 Zurich。折疊會改寫那些在 Unicode 中沒有任何分解的獨立字母,讓 ø 變成 o、ł 變成 l、đ 變成 d、Łódź 變成 Lodz,這是你在去除通訊錄中的重複項目,或是建構下游軟體能以 ASCII 讀取的識別碼之前所需要的。音譯則是把一個字母展開成兩個,例如 æ 變成 ae、œ 變成 oe、ß 變成 ss、þ 變成 th;它之所以被放在獨立的開關後面,正因為這是拼法的改動,而不是變音符號的移除。
| 類別 | 輸入範例 | 輸出 | 規則 |
|---|---|---|---|
| 變音符號去除 | café | cafe | 從拉丁基底字母中移除組合記號 |
| 變音符號去除 | Zürich | Zurich | 從拉丁基底字母中移除組合記號 |
| 折疊(無 Unicode 分解) | Łódź | Lodz | 明確的折疊對照表,並對照 UnicodeData.txt 進行驗證 |
| 折疊(無 Unicode 分解) | ø, đ | o, d | 明確的折疊對照表 |
| 音譯(開啟開關) | æ, œ, ß, þ | ae, oe, ss, th | 將一個字母改寫為兩個;由獨立開關控制 |
| 音譯(關閉開關) | æ, ß | æ, ß | 開關關閉時保持原樣 |
| 保留非拉丁文字 | ά, ё,你,🎉 | ά, ё,你,🎉 | 僅從拉丁基底字母中移除記號 |
| 嚴格 ASCII(開啟開關) | José 你好 | Jose | 可選的非拉丁文字去除,以產生純 ASCII 輸出 |
最後一列的嚴格 ASCII 開關預設為關閉,因為較常見的需求是保留非拉丁資料的完整性,而不是將其刪除。只有在你確實需要每一個位元組都落在可列印 ASCII 範圍內時才開啟,例如將結果送入一個拒絕任何 7 位元以外字元的舊式資料庫時。
會讓過於天真的去除工具中招的邊界情況
希臘文與西里爾文字母在 Unicode 中的分解方式,與帶變音的拉丁字母完全相同,這正是許多立意良善的程式會掉入的陷阱。一個呼叫 String.prototype.normalize("NFD") 然後刪除每個組合記號的天真記號去除器,會不知不覺地把 ζ 改成 α、έ 改成 ε、ё 改成 е,損害它從未被要求清理的其他文字。「從文字中移除變音符號」工具只會移除附著在拉丁基底字母上的記號,因此每一個希臘文與西里爾文的字素都會逐位元組通過,包括那些看起來像組合記號、但在所屬文字中本身就具備文法功能的梵文母音記號。CJK 字元與表情符號同樣會被保留,當一份通訊錄同時混雜了葡萄牙文姓名、希臘文城市名稱,以及一個不知為何出現的生日蛋糕圖案時,這一點就格外重要。
等冪性是第二項值得了解的特性。由於工具會將輸出重新組合成 NFC,並只執行一次折疊對照表,將輸出再送入工具一次也不會產生任何改變。這聽起來微不足道,但它正是讓這套工作流程在反覆執行的管線中保持安全的特性:你可以重新執行同一段文字以從中斷中復原、將其送進另一個相關工具,或串接到 slug 產生器,而不會讓轉換效果疊加。像 é 這種以單一碼位輸入的預組文字,以及 e 加上組合尖音符這類分解輸入,會產生相同的輸出,這消除了從多種來源、編碼慣例混雜的匯入資料中的一整類錯誤。
第三個邊界情況,是對這項工具「不是什麼」保持誠實。它是一個針對拉丁文字、附有明確音譯規則的變音符號去除器,而不是通用的音譯工具:它不會把西里爾文或漢語拼音羅馬化,也不會把希臘文轉成拉丁字母,而 ð、ĸ 這類特殊字母是依慣例折疊,而不是依任何 Unicode 規則,這一點網頁上有揭露而非隱瞞。如果你需要非拉丁文字的羅馬化,你需要的是另一種工具;把這個工具搭配一個只做正規化的做法,會構成形狀錯誤的管線。
\What to Do With the Cleaned Text
Once a column is consistent ASCII, several follow-up tasks become much simpler. Deduplication with UNIQUE() now collapses "Zürich" and "Zurich" into a single row instead of two, and VLOOKUP() matches across systems that store the same customer name in two different normalized forms. If the cleaned text is destined for a URL path or a filename, the Text To Slug tool takes the next step and produces a hyphen-separated slug ready for a CMS or a static-site generator, with explicit rules for what to do with the rare character that even this tool passes through. If the source column carried inherited formatting from a copy-pasted web page, the related guide on how to remove text formatting from Google Docs covers the in-document approach for the cells themselves, which is a useful companion step before you paste in the cleaned output so the new column does not inherit bold or coloured text from the source.
Running the cleanup outside the spreadsheet also keeps your work auditable. The tool reports an exact change count, the input and output sit side by side on the page, and nothing in the pipeline requires granting a script permission, installing an add-on, or trusting a third-party server with the contents of your customer list. For teams working under data-residency rules or simple common sense, that combination of reliability and locality is usually the deciding factor.
For a deeper look, see How to Remove Duplicate Lines in Illustrator.