SPL XLL 实践:Excel 中花样字符串拆分
字符串拆分是工作中经常遇到的问题,对于常规的以逗号,分号,空格等为分隔符或规则的固定宽度拆分可以直接使用 Excel 的分列功能进行拆分,但复杂一点的字符拆分 Excel 做起来往往就很麻烦或者难以实现了。
用 SPL XLL 就很容易处理了,它有专门的字符拆分函数,可以按任意分隔符拆分,还可以拆出字符串中数字、日期、解析 K-V 格式等,非常好用。
1. 按分隔符拆分
如果是以逗号,分号等单个字符分隔的字符串,可以用 Excel 的分列功能来实现。
如果是以回车符或多字符分隔的字符串,分列功能就不好直接实现。借助 SPL 的 split() 函数来拆分字符串,在参数里直接写入分隔符即可,单字符,多字符都支持。
(1)以回车符(换行符)分隔
有回车符分隔的数字串,将其拆分为多列。
操作很简单,在 Excel 的空白处输入公式:
=spl("=?.split(""\n"")",A1)
?表示要拆分的内容,在这里指 A1,split() 是字符串拆分函数,”\n”表示回车符,注意 Excel 字符串中的引号要用双层引号来表示。整句公式的意思就是按照回车符拆分单元格 A1 里的字符串。
拆分结果
同样如果以其他分隔符拆分只需要改变双层引号中的内容即可,例如以多字符分隔。
(2)多字符分隔
将下列字符串以“and”拆分,拆分出每种水果的名字
将 split() 中的双层引号里的内容变为 and 即可:
=spl("=?.split(""and"")",A1)
返回结果
2. 拆分出数字和单词
(1)拆分出数字
有一列混合了字符和数字的数据,其中数字和字符可能在多处出现,且出现规律不定
需要将每一行的数字和字符分离开来,将分离出来的数字放在B列,剩余字符放在 C 列,效果如下图
Excel 有快速填充功能,但需要人工给定首行参考值,麻烦且容易出错,而且有些字符快速填充功能也无法分离,大概率要写 VBA 才能实现图中结果。
SPL XLL 就灵活多了,在 B1 中写入:
=spl("=?.words@d().concat()",A1)
words()表示将字符串中的英文字母和其他字符拆开,words@d() 表示返回其中的数字,如第一行的 1、3、6,concat() 表示合并,如 1、3、6 合并就是 136
再把 B1 拖动复制到每一行,得到上图数字列B。
在 C1 中写入:
=spl("=(?.words@w()\?.words@d()).concat()",A1)
words@w() 表示返回所有的拆好的字符,符号 \ 表示求差集。从所有字符中减去其中的数字就是剩下的字符串也即是 C 列。
把C1拖动复制到每一行,得到上图字符列C
改变 word() 函数 @后面的字母选项就可以返回不同的分离项。
(2)拆分出单词
使用 words() 函数还经常可以用来拆分出字符串中的单词例如下图,拆出其中的单词 apple、banana 等。
同样这种不规则的字符拆分 Excel 也不好实现。有了 SPL XLL 的 words() 函数就很 easy 了。
输入公式:
=spl("=?.words()",A1)
返回单词:
3. 拆出日期
有事件备忘录如下,包含了日期信息如 6.5.18、18.7.19
将信息里面的日期都分离出来,并且用分号隔开后放到后面一列,方便以后统计。
效果如下:
这种一个句子里面有不定个数的日期分离,通常只能写 VBA 了,或者用正则表达式去匹配解析,都很繁琐。而有 SPL XLL 就简单多了。
在 B1 写入公式:
=spl("=?1.split("""").(date(~,""dd.MM.yy"")).select(ifdate(~)).concat("";"")",A1)
用空格拆分字符串,将拆分出的字符串能够按指定格式转换为日期类型的数据转为日期型
选出日期型数据,用分号连接成串。
再拖动复制到每一行,得到上图 B 列结果
4. 解析 Key-Value 键值对
有如下字符串,有多个关键字 Key,每个 Key 有一个对应值 Value
把关键字和其对应的值解析出来,效果如下图:
输入公式:
=spl("=?1.property()",A1)
返回图中结果。
property()函数直接解析出想要的表格,简直不要太方便。
SPL XLL的函数可以实现多种形式的字符串拆分,操作简单直观,容易理解。
SPL XLL的功能远不止此,它还有很多灵活的数据处理函数,能够处理各种复杂 Excel 操作,写法都不难,非常好用。
SPL XLL 下载地址:» esProc Desktop Download
安装方法:SPL XLL 安装与配置
更多参考案例:esProc 桌面版与 Excel 处理
英文版