|
楼主 |
发表于 2018-2-20 12:02
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 流浪铁匠 于 2018-2-20 12:31 编辑
3,非打印字符
在Excel里面,极少数字符是肉眼看不见的,但是在字符串中是实际存在的,打印时也无法打印显示,称为非打印字符
这类字符的特性是使用len函数获取字符数比肉眼可见的字符数多,部分该类字符性质类似空格,但还是有一些差异
我把这类不可见字符主要分成3类
3.1- 类空格型
3.2- 类假空型
3.3.1- char(63)
3.3.2- char(255)
3.1- 类空格型:
这类字符和空格类似,不可见字符占用字符串的位置,肉眼看不见,但可以用鼠标选取发现
这类字符一般可以直接复制该字符后进行替换即可清除
这类不可见字符,常见类型可以直接使用trim/clean函数处理
个别顽固分子,函数法可以将该不可见字符复制后粘贴在substitute的参数中或使用替换功能进行替换处理
纯函数解法需要left/right/mid配合code获取其字符代码后使用对应的char函数配合substitute清除
该纯函数方法可以有效清除code值为127的顽固分子(该字符使用trim和clean均无法清除)
但无法有效处理下面3-3的char(63)和char(255)
另:clean同时直接清除31个code结果为0的不可见字符(详见姊妹篇《char与code的恩怨情仇》)
3.2- 类假空型
该类型不可见字符,使用len可以确定其存在,但是,编辑栏使用抹黑方式无法找到(疑似字符宽度过窄)
故我把这类字符称为"类假空",因为编辑栏无法直接将其现原形
这类字符的处理,可以把字符粘贴在记事本或word中现形并获取(有些老师称为照妖镜),复制后替换处理或者使用3-1的纯函数法先用code函数获取字符代码后,使用对应的char配合substitute清除
具有这类性质的字符有char(9)和unicode部分字符
char(9)等直接使clean清除,但部分unicode字符的顽固分子请参考3.3的处理方式
3.3.1- char(63)
之所以单独列举这个code值的字符,是想吐槽一下
由于unichar/unicode这对函数在2013版才出现
早期版本由于无法深究这个字符,之前看过几位前辈的帖子,也有介绍过这个字符,结论基本是对于code值为63的不可见字符,推荐使用替换大法处理
在我的2016版(默认语言中文),一共有1087896个数字使用unichar函数获取的字符,用code获取的数字代码是63 !!!
太多的字符的unicode值是不一样的,但由于code函数不识别这些字符,默认为"?",所以code值均为63
仅1-255对应的unicode字符中,unichar(160)这个字符的code结果即为63,且为不可见字符,但unicode(160)无法使用clean,trim,substitute+char(63)等各种常规函数手段处理
所以,这类字符的处理方式就是直接复制替换,纯函数需要使用2013新增的unicode确定字符代码配合substitute处理
该部分内容详细介绍请见http://club.excelhome.net/thread-1397754-1-1.html
3.3.2-char(255)
原本char(255)为可见字符: ÿ
这里介绍的是类似char(63)性质的字符
姐妹篇中幸运的发现char(65280-65535)产生的合计256个字符的code值均为255,且均为不可见字符
且这256个字符对应的unicode代码均为63733
这256个字符无法使用trim/clean/substitute+char(255) 清除
可以使用sunstitute+unichar(63733) 清除
|
|