本帖最后由 Grayson.Shang 于 2024-5-7 14:31 编辑
先说一说需求场景,
如下,有一个字符串,我想要查询字符串中,从后向前数,“AB”第一次出现的位置
活字格是支持Excel公式的,但是找遍所有的Excel公式,比如查找字符串位置的公式,有FIND,SEARCH,但是没有一种使用,可以从后向前查询
在有这个需求的情况下,我都已经考虑是否需要使用一个插件来完成了。但是不死心的我,还是想要在网上搜一下,结果还真让我给搜到了。
定位字符最后一次出现的位置,就用Search函数,简单且高效! - 知乎 (zhihu.com)
然后我就整理了一下,通过服务端命内部的逻辑,完成了这个功能,文章张后面会上传demo,大家直接导入服务端命令即可使用。
下面简单介绍一下实现的原理。
这个方案,最主要使用到的是Excel SUBSTITUTE 函数,那么为什么会说这个函数是最主要的呢?
下面微软官方文档中对这个函数的解析
SUBSTITUTE 函数 - Microsoft 支持
这个是Excel中字符串中替换子字符串的函数,大家应该有人用过比较多,这次主要关注一下第四个参数。
实现步骤
1、查询需要查询的字符串,在源字符串中,总共出现了几次
使用到的函数分别为,SUBSTITUTE 和 LEN
使用SUBSTITUTE将需要查询的字符串替换成空的字符串,这时第四个参数为空
使用LEN分别统计替换前和替换后字符串的长度,用前后的差值 除以 查找字符串的长度,就可以获取到共出现多少次
=QUOTIENT(LEN(原字符串)-LEN(SUBSTITUTE(原字符串,查找字符串,"")),LEN(查找字符串))
2、从后先前,将想要执行查询的字符串,替换成特殊字符串
使用到的函数,为SUBSTITUTE,这时第四个参数为总共出现的次数-想要查询的序列+1,这里+1是因为,从1开始
=SUBSTITUTE(原字符串,查找字符串,替换字符串,统计查找字符串出现的次数-第几次+1)
3、查询特殊字符串所在的位置
使用到的函数为FIND
注意问题:
>1 第2步中的替换特殊字符串,是有要求的,需要源字符串中没有出现过的,比如demo中,会先查询是否存在,@,若是不存在则替换成@,否则再查询#、@#。若是查询结果与预期有出入,那么就是特殊字符本身存在,若是插入特殊字符后,与之前的字符串组成替换的特殊字符
>2 FIND函数,查询子字符串时,若是没有查询到,返回的结果是,#VALUE,不是0,为了更好判断,在使用FIND函数时,建议处理#VALUE,我是使用IFERROR函数,将返回结果转成0
测试结果
|
|