2018/5/18
Excel的大魔王:不可視字元(NO-BREAK SPACE, )
公司有許多同事Excel功力已臻化境,Vookup、樞紐分析等功能非常上手。但有時會遇到一個棘手的問題,某些客戶編號(學號)會對不到,或是排序時,明明同屬於一組單位代碼109的資料,卻被排序到不同的位置去。
一般而言,這是因為要拿來比對的兩個欄位之間 (1)資料型態不同 (2)比對的字串末尾夾雜著不可視字元。型態不同的問題,可以利用Excel的「資料剖析」將欄位裡的資料整欄選取,使其變成真正的數字或文字(光改儲存格格式是沒有用的)。但如果資料來自於網站複製貼上的文字,在每個欄位末尾可能藏著設計師放進去、美化表格的字元,肉眼保證看不到,這就超悲哀了。
通常可用的方法有: 1.用len()函數查一下字串的長度,例如儲存格 A1的值是109, len(A1)卻看到長度是4;不得了,後面有鬼。
2.如果已知資料長度固定,那麼資料剖析時選固定寬度,可以像切西瓜一樣從你要的長度位置切下去,後面的就不要了。
3.如果長度不固定而且數字文字混雜,,可以先用 clean()、trim()等函數清一次;如果不能奏效,只能用SUBSTITUTE這個函數將不要的可疑字元濾除。
以這次的案例而言,本來以為是夾雜空白字元,乾脆發狠利用Excel內的char()函數,從1-255組出ASCII全部的字元做比對。結果還是找不到(崩潰)?
後來想想,這個已知的不可見字元在字串末尾,用right(xx,1)可以找出來他的本尊,再用code()函數可以找出他的字碼。得出的結果是char(63),是個問號? 這個答案是錯的。最後看一下Excel還有個函數就叫unicode,可以依照字元查編碼,得出這個搗蛋鬼的真正樣貌是 UNICHAR(160),學名是不換行空格(NO-BREAK SPACE),人果然是他殺的。要取她的字元,則要用 UNICHAR(160)。
https://zh.wikipedia.org/wiki/%E4%B8%8D%E6%8D%A2%E8%A1%8C%E7%A9%BA%E6%A0%BC
由此,網路上流傳的特殊字元清除名單,在Excel中處理時應該略作調整。
Char(1),空字符NULL
Char(9),tab
Char(10),換行
Char(13),Enter
Char(32),空格
Char(160) 找不到的話 => unichar(160)
最後用 SUBSTITUTE(C4,UNICHAR(160),"") 將其取代,終於打完收工。
訂閱:
文章 (Atom)
-
公司使用的伺服器SSL都是向TWCA購買。 以往自TWCA下載的憑證,包含server.cer與 server.key,經過 OpenSSL 轉換成.pfx後,就可以匯入到IIS使用。 從 https://slproweb.com/products/Win32OpenSSL.h...
-
最近有個side project的需求,是需要利用爬蟲去抓取國內外官方機構的Meta data後設資料,對現有的資料做補充。但這些抓取資料的來源格式差異很大,而且刻出來的程式是希望可以打包給不太懂電腦的使用者,執行幾千筆資料的抓取與更新,因此使用python+爬蟲的solutio...
-
Trello是個很棒的圖形化任務管理工具,對於想試試任務管理、看板方法的人相當有幫助。依照Ruddy Lee 所言 [ 原文出處 ] ,「讓工作流程被視覺化,讓我們的決策更接近事實、更容易作為改善的依據、更容易管理及更有效率」。這句話實在說得太棒了。 Trello很容易上手,...