如何用Excel Power Query移除文本中的不可见Unicode字符?
解决Power Query中含不可见Unicode字符的文本匹配问题
方法一:自定义函数筛选可打印字符(推荐)
编写Power Query自定义函数,保留所有可打印字符(包括带重音的Unicode字符),排除各类不可见控制字符:
let RemoveInvisibleChars = (inputText as text) as text => let SplitChars = Text.ToList(inputText), FilteredChars = List.Select(SplitChars, each let CharCode = Unicode.FromCharacter(_) in // 保留ASCII可打印字符 + 160及以上的非控制类Unicode字符 (CharCode >= 32 and CharCode <= 126) or (CharCode >= 160 and not List.Contains({8236, 8237}, CharCode)) ), Result = Text.Combine(FilteredChars) in Result in RemoveInvisibleChars
使用时在Power Query中添加自定义列,调用函数处理发票号字段:CleanedInvoice = RemoveInvisibleChars([Invoice Number])
该函数会自动过滤ASCII控制字符(0-31、127)和你遇到的8236(弹出方向格式符)、8237(左至右覆盖符),同时保留带重音的人名类字符(如é、ñ等)。
方法二:枚举不可见字符批量移除
如果需要更直接的枚举方式,先定义需移除字符的列表,再用Text.Remove批量清理:
// 定义需移除的不可见字符码点,转换为字符列表 InvisibleChars = List.Transform({0..31, 127, 8236, 8237}, Unicode.ToCharacter), // 清理发票号字段 CleanedInvoiceNumber = Text.Remove([Invoice Number], InvisibleChars)
后续遇到新的不可见字符,只需将对应Unicode码点添加到列表即可,无需逐个手动输入字符。
补充说明
Excel单元格的=运算符会自动忽略部分不可见控制字符,因此看似相同的文本会显示为TRUE;但Power Query严格按照字符的Unicode码点对比,必须手动清理特殊字符才能正常匹配。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

