长期使用着简道云的亲们,你遇到过这种情况吗?当一个函数公式要去微调,看着贪吃蛇般巨长的公式,迎面而来一种无法下手的挫败感。
当然一个问题的形成,有其环境因素,也有其历史原因,可现在需要痛苦的是当下的自己,不是吗 ?
可能是继承自EXCEL的函数公式习惯,在简道云中编辑函数公式时,大多数是不太考虑层次结构,更别说注释及文档等,最终所呈现的就像是一条贪吃蛇。
在编辑函数公式的当时,因其是一步一步的推敲及测试所得,是一种正序的逻辑,所以当时做任何微调都不太算额外耗费精力,但当一个较长时期之后,这个问题可能就会体现出来。
也许以前,这种事儿无解,现在好在有了AI,借助AI工具可以帮助我们去重新理解公式的含义。
基于AI ,曾也发专贴 👉《用好这个AI,写公式就是这么EASY》分享过通过 KIMI 写简道云函数公式的方式,当然,现在也可以通过 👉 微分享智能助理 来生成公式或解析公式,单以生成公式这一场景来说,如果自己愿意尝试,KIMI 的内容可能会更为精确些,另外,讯飞星火 近期已发新版,也可以通过分享的提示词去尝试一下。
下即将开始本期内容,围绕“简道云函数公式美化助手”展开,一则,了解一下其内在的逻辑,若以后有用到,可能会略为有益,再则,分享一下本次解构问题的逻辑。
> 简道云函数公式美化助手
>> 功能介绍
本功能致力于提高您的工作效率。可重新格式化简道云平台上的函数公式,使公式的层次结构更加清晰,从而提高其可读性和维护性。
>> 提供结果
1. 原始公式: 📝 展示从函数公式中提取的原始公式部分,保持其原始状态。
2. 美化公式: 🎨 提供仅经过格式美化的公式,以增强视觉呈现效果。
3. 完整公式: 📋 提供可以直接粘贴到函数公式编辑框中的公式,它将自动匹配原绑定的字段,简化操作流程。
> 使用示例
> 测试链接
> 实现逻辑
>> 参考示例
以 “当前进度”公式为例 进行后续内容 👉 点击这里查阅表单
1. 原始公式
CONCATENATE(CONCATENATE(REPT(已完成标识,INT(当前值/目标值*10)),REPT(未完成标识,INT((1-当前值/目标值)*10)))," - ",TEXT(当前值/目标值,"#%"))
2. 美化公式
CONCATENATE(
CONCATENATE(
REPT(
已完成标识,INT(
当前值/目标值*10
)
)
,REPT(
未完成标识,INT((
1-当前值/目标值
)
*10
)
)
)
," - ",TEXT(
当前值/目标值,"#%"
)
)
>> 结构解析
在公式编辑中 点击 复制后 可获得以下信息
{"text":"CONCATENATE(CONCATENATE(REPT(已完成标识,INT(当前值/目标值*10)),REPT(未完成标识,INT((1-当前值/目标值)*10))),\" - \",TEXT(当前值/目标值,\"#%\"))","marks":[{"from":{"line":0,"ch":29},"to":{"line":0,"ch":34},"field":"_widget_1705037332585","entry":""},{"from":{"line":0,"ch":39},"to":{"line":0,"ch":42},"field":"_widget_1705037332584","entry":""},{"from":{"line":0,"ch":43},"to":{"line":0,"ch":46},"field":"_widget_1705037332583","entry":""},{"from":{"line":0,"ch":57},"to":{"line":0,"ch":62},"field":"_widget_1705038272137","entry":""},{"from":{"line":0,"ch":70},"to":{"line":0,"ch":73},"field":"_widget_1705037332584","entry":""},{"from":{"line":0,"ch":74},"to":{"line":0,"ch":77},"field":"_widget_1705037332583","entry":""},{"from":{"line":0,"ch":96},"to":{"line":0,"ch":99},"field":"_widget_1705037332584","entry":""},{"from":{"line":0,"ch":100},"to":{"line":0,"ch":103},"field":"_widget_1705037332583","entry":""}],"cmf":true}
使用 JSON 格式化工具解析后可获得以下信息
{
"text": "CONCATENATE(CONCATENATE(REPT(已完成标识,INT(当前值/目标值*10)),REPT(未完成标识,INT((1-当前值/目标值)*10))),\" - \",TEXT(当前值/目标值,\"#%\"))",
"marks": [{
"from": {
"line": 0,
"ch": 29
},
"to": {
"line": 0,
"ch": 34
},
"field": "_widget_1705037332585",
"entry": ""
},
{
"from": {
"line": 0,
"ch": 39
},
"to": {
"line": 0,
"ch": 42
},
"field": "_widget_1705037332584",
"entry": ""
},
{
"from": {
"line": 0,
"ch": 43
},
"to": {
"line": 0,
"ch": 46
},
"field": "_widget_1705037332583",
"entry": ""
},
{
"from": {
"line": 0,
"ch": 57
},
"to": {
"line": 0,
"ch": 62
},
"field": "_widget_1705038272137",
"entry": ""
},
{
"from": {
"line": 0,
"ch": 70
},
"to": {
"line": 0,
"ch": 73
},
"field": "_widget_1705037332584",
"entry": ""
},
{
"from": {
"line": 0,
"ch": 74
},
"to": {
"line": 0,
"ch": 77
},
"field": "_widget_1705037332583",
"entry": ""
},
{
"from": {
"line": 0,
"ch": 96
},
"to": {
"line": 0,
"ch": 99
},
"field": "_widget_1705037332584",
"entry": ""
},
{
"from": {
"line": 0,
"ch": 100
},
"to": {
"line": 0,
"ch": 103
},
"field": "_widget_1705037332583",
"entry": ""
}],
"cmf": true
}
当我们将JSON中的信息折叠后可得出以下内容
{
"text": "CONCATENATE(CONCATENATE(REPT(已完成标识,INT(当前值/目标值*10)),REPT(未完成标识,INT((1-当前值/目标值)*10))),\" - \",TEXT(当前值/目标值,\"#%\"))",
"marks": Array[8],
"cmf": true
}
经过与公式编辑框中的内容对比,以上 JSON内容 可得出以下结论:
1、text 部分为可视的公式部分内容;
2、marks 部分为公式中字段的位置信息,所在行,以及起止位置;
3、cmf 部分经测试 当为 true 时可绑定 marks 中信息对 text 中的字段起作用。
>> 构建过程
1、定位字段
在一个函数公式中除了函数以外,还有字段以及用户自定义的信息,故而直接以显示内容不易区分部分信息是字段还是用户自定义信息,此处,暂较为适宜的方式是通过 marks 中的信息,找到函数公式中的每一个字段。
2、添加标识
在遍历函数公式信息的同时,会通上述的方式,找到每一个字段,并将字段的格式调整为 “S_原字段内容_E”的格式,以便于后续格式调整后重构位置信息。
3、清洗公式
因每位用户不同的公式编辑习惯,在公式中可能会存在已添加的控制格式类的信息,比如:换行或空格,清洗公式的目的是清洗掉公式中已有的此类信息,以便于后续美化公式时的一致性及减少重复的冗余的格式化。
4、美化公式
主要方式是遍历清洗后的公式,当发现“ ( ”与“ ) ”时调整换行与缩进。
5、添加标记
遍历美化公式后的公式,确定字段所在的行与起止位置,结合 marks 已有的信息,重构一个新的 marks 。
6、整合内容
结合美化后的公式以及重构的 marks 构建一个新的 JSON 信息,以实现粘贴进公式编辑框后可自动重新绑定字段信息,解决手动逐一绑定时即耗精力又可能出错的问题。
> 注意事项
1、本功能中尚未设定任何审核机制,在使用美化后的公式之前,请务必进行仔细甄别,以确保其准确性和适用性。
2、如果你的公式中存在 “ S_ ” 、“ _E ” 、“ \n ” 等信息,美化后的公式可能会不适宜直接使用,请仔细甄别。
3、在构建字段名或其它非需运算的场景时,建议谨慎使用与运算符相同的字符,避免造成的误读的可能性。
> 更多内容
承接简道云技术咨询与应用定制
承接月度技术支持服务
更多沟通交流可添加微信(zmlnow)
添加时请备注:简道云
|