找回密码
 立即注册

QQ登录

只需一步,快速开始

Grayson.Shang 活字格认证 Wyn认证
超级版主   /  发表于:2024-5-7 14:31  /   查看:2179  /  回复:0
本帖最后由 Grayson.Shang 于 2024-5-7 14:31 编辑

先说一说需求场景,
如下,有一个字符串,我想要查询字符串中,从后向前数,“AB”第一次出现的位置
ABCADSDSDSAAB@B#EWW

活字格是支持Excel公式的,但是找遍所有的Excel公式,比如查找字符串位置的公式,有FIND,SEARCH,但是没有一种使用,可以从后向前查询

在有这个需求的情况下,我都已经考虑是否需要使用一个插件来完成了。但是不死心的我,还是想要在网上搜一下,结果还真让我给搜到了。
定位字符最后一次出现的位置,就用Search函数,简单且高效! - 知乎 (zhihu.com)

然后我就整理了一下,通过服务端命内部的逻辑,完成了这个功能,文章张后面会上传demo,大家直接导入服务端命令即可使用。

下面简单介绍一下实现的原理
这个方案,最主要使用到的是Excel SUBSTITUTE 函数,那么为什么会说这个函数是最主要的呢?

下面微软官方文档中对这个函数的解析
SUBSTITUTE 函数 - Microsoft 支持
image.png670684814.png

这个是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


测试结果
image.png170820616.png

通过Excel实现查询字符串中指定字符串最后一次出现的位置.fgcc

135.29 KB, 下载次数: 551

评分

参与人数 3满意度 +15 收起 理由
feixianl + 5
玉轩 + 5
赛龙周 + 5

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部