@rezti/dsh-rez-suite 0.1.49 → 0.1.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/CHANGELOG.md +13 -2
  2. package/README.md +3 -3
  3. package/README.zh.md +2 -2
  4. package/cordis.patch.yml +1 -1
  5. package/lib/client.d.ts +31 -3
  6. package/lib/client.js +343 -7
  7. package/lib/index.js +244 -15
  8. package/lib/style.css +7 -0
  9. package/package.json +12 -11
  10. package/src/boss/mount.ts +4 -3
  11. package/src/boss/register.ts +1 -1
  12. package/src/boss/seed.ts +34 -0
  13. package/src/changelog.ts +48 -0
  14. package/src/channel-board.ts +55 -0
  15. package/src/client/locales.ts +62 -6
  16. package/src/client/panel/BoardTab.tsx +136 -0
  17. package/src/client/panel/ConfigTab.tsx +2 -2
  18. package/src/client/panel/StatusTab.tsx +31 -0
  19. package/src/client/panel/panel.module.css +7 -0
  20. package/src/client/settings-card.tsx +4 -1
  21. package/src/index.ts +3 -2
  22. package/src/protocol.ts +14 -0
  23. package/src/routes.ts +7 -1
  24. package/src/tools.ts +49 -6
  25. package/src/wecom-cli.ts +125 -0
  26. package/templates/boss/ops/AGENTS.md +2 -0
  27. package/templates/shared/wecom-cli.SOURCE.md +9 -0
  28. package/templates/shared/wecom-office/SKILL.md +32 -0
  29. package/templates/shared/wecomcli-calendar/SKILL.md +303 -0
  30. package/templates/shared/wecomcli-calendar/references/calendar-agenda.md +224 -0
  31. package/templates/shared/wecomcli-calendar/references/calendar-cancel.md +108 -0
  32. package/templates/shared/wecomcli-calendar/references/calendar-create.md +238 -0
  33. package/templates/shared/wecomcli-calendar/references/calendar-freebusy.md +207 -0
  34. package/templates/shared/wecomcli-calendar/references/calendar-meeting-room.md +170 -0
  35. package/templates/shared/wecomcli-calendar/references/calendar-search.md +206 -0
  36. package/templates/shared/wecomcli-calendar/references/calendar-update.md +272 -0
  37. package/templates/shared/wecomcli-contact/SKILL.md +58 -0
  38. package/templates/shared/wecomcli-disk/SKILL.md +389 -0
  39. package/templates/shared/wecomcli-doc/SKILL.md +137 -0
  40. package/templates/shared/wecomcli-doc/references/doc-contents-append.md +20 -0
  41. package/templates/shared/wecomcli-doc/references/doc-contents-overwrite.md +27 -0
  42. package/templates/shared/wecomcli-doc/references/doc-create.md +161 -0
  43. package/templates/shared/wecomcli-doc/scripts/build_docx.py +1375 -0
  44. package/templates/shared/wecomcli-doc-manage/SKILL.md +132 -0
  45. package/templates/shared/wecomcli-doc-manage/references/doc-members-update.md +24 -0
  46. package/templates/shared/wecomcli-doc-manage/references/doc-names-update.md +20 -0
  47. package/templates/shared/wecomcli-doc-manage/references/doc-rules-update.md +22 -0
  48. package/templates/shared/wecomcli-email/SKILL.md +218 -0
  49. package/templates/shared/wecomcli-email/references/forward-mail.md +131 -0
  50. package/templates/shared/wecomcli-email/references/get-mail.md +166 -0
  51. package/templates/shared/wecomcli-email/references/reply-mail.md +138 -0
  52. package/templates/shared/wecomcli-email/references/search-mail.md +111 -0
  53. package/templates/shared/wecomcli-email/references/security.md +53 -0
  54. package/templates/shared/wecomcli-email/references/send-mail.md +186 -0
  55. package/templates/shared/wecomcli-email/references/send-schedule.md +83 -0
  56. package/templates/shared/wecomcli-media/SKILL.md +98 -0
  57. package/templates/shared/wecomcli-meeting/SKILL.md +373 -0
  58. package/templates/shared/wecomcli-meeting/references/meeting-cancel.md +113 -0
  59. package/templates/shared/wecomcli-meeting/references/meeting-create.md +167 -0
  60. package/templates/shared/wecomcli-meeting/references/meeting-list.md +226 -0
  61. package/templates/shared/wecomcli-meeting/references/meeting-original-get.md +98 -0
  62. package/templates/shared/wecomcli-meeting/references/meeting-search.md +173 -0
  63. package/templates/shared/wecomcli-meeting/references/meeting-update.md +217 -0
  64. package/templates/shared/wecomcli-message/SKILL.md +200 -0
  65. package/templates/shared/wecomcli-shared/SKILL.md +73 -0
  66. package/templates/shared/wecomcli-sheet/SKILL.md +172 -0
  67. package/templates/shared/wecomcli-sheet/references/sheet-contents-update.md +47 -0
  68. package/templates/shared/wecomcli-sheet/references/sheet-ranges-get.md +45 -0
  69. package/templates/shared/wecomcli-sheet/references/sheet-rows-append.md +45 -0
  70. package/templates/shared/wecomcli-sheet/references/sheet-subsheets-add.md +26 -0
  71. package/templates/shared/wecomcli-sheet/references/sheet-subsheets-delete.md +20 -0
  72. package/templates/shared/wecomcli-smartpage/SKILL.md +170 -0
  73. package/templates/shared/wecomcli-smartpage/references/data-driven-pages.md +50 -0
  74. package/templates/shared/wecomcli-smartpage/references/formula/arraylist.md +369 -0
  75. package/templates/shared/wecomcli-smartpage/references/formula/datetime.md +283 -0
  76. package/templates/shared/wecomcli-smartpage/references/formula/logic.md +247 -0
  77. package/templates/shared/wecomcli-smartpage/references/formula/math.md +362 -0
  78. package/templates/shared/wecomcli-smartpage/references/formula/operators.md +246 -0
  79. package/templates/shared/wecomcli-smartpage/references/formula/pageblock.md +76 -0
  80. package/templates/shared/wecomcli-smartpage/references/formula/templates.md +410 -0
  81. package/templates/shared/wecomcli-smartpage/references/formula/text.md +377 -0
  82. package/templates/shared/wecomcli-smartpage/references/formula/user.md +22 -0
  83. package/templates/shared/wecomcli-smartpage/references/formula-reference.md +192 -0
  84. package/templates/shared/wecomcli-smartpage/references/mdx-syntax.md +739 -0
  85. package/templates/shared/wecomcli-smartpage/references/smartpage-edit.md +506 -0
  86. package/templates/shared/wecomcli-smartsheet/SKILL.md +154 -0
  87. package/templates/shared/wecomcli-smartsheet/assets/templates/README.md +53 -0
  88. package/templates/shared/wecomcli-smartsheet/assets/templates/ai_efficiency.md +709 -0
  89. package/templates/shared/wecomcli-smartsheet/assets/templates/connect_to_app.md +380 -0
  90. package/templates/shared/wecomcli-smartsheet/assets/templates/financial_accounting.md +369 -0
  91. package/templates/shared/wecomcli-smartsheet/assets/templates/hr_and_administration.md +475 -0
  92. package/templates/shared/wecomcli-smartsheet/assets/templates/ledger_records.md +156 -0
  93. package/templates/shared/wecomcli-smartsheet/assets/templates/manufacturing.md +395 -0
  94. package/templates/shared/wecomcli-smartsheet/assets/templates/marketing.md +186 -0
  95. package/templates/shared/wecomcli-smartsheet/assets/templates/office_essentials.md +299 -0
  96. package/templates/shared/wecomcli-smartsheet/assets/templates/personal_efficiency.md +70 -0
  97. package/templates/shared/wecomcli-smartsheet/assets/templates/procurement_logistics.md +325 -0
  98. package/templates/shared/wecomcli-smartsheet/assets/templates/project_management.md +564 -0
  99. package/templates/shared/wecomcli-smartsheet/assets/templates/rd_process_customer.md +222 -0
  100. package/templates/shared/wecomcli-smartsheet/assets/templates/rd_process_ops.md +105 -0
  101. package/templates/shared/wecomcli-smartsheet/assets/templates/rd_process_project.md +109 -0
  102. package/templates/shared/wecomcli-smartsheet/assets/templates/rd_process_research.md +92 -0
  103. package/templates/shared/wecomcli-smartsheet/assets/templates/sales_and_operations.md +446 -0
  104. package/templates/shared/wecomcli-smartsheet/assets/templates/store_management.md +431 -0
  105. package/templates/shared/wecomcli-smartsheet/assets/templates/team_tasks.md +274 -0
  106. package/templates/shared/wecomcli-smartsheet/assets/templates/wechat_customer.md +384 -0
  107. package/templates/shared/wecomcli-smartsheet/assets/templates/work_report.md +100 -0
  108. package/templates/shared/wecomcli-smartsheet/references/common.md +143 -0
  109. package/templates/shared/wecomcli-smartsheet/references/smart-sheet-chart-types.md +95 -0
  110. package/templates/shared/wecomcli-smartsheet/references/smart-sheet-edit.md +589 -0
  111. package/templates/shared/wecomcli-smartsheet/references/smart-sheet-field-types.md +438 -0
  112. package/templates/shared/wecomcli-smartsheet/references/smart-sheet-formula.md +845 -0
  113. package/templates/shared/wecomcli-smartsheet/references/smart-sheet-read.md +391 -0
  114. package/templates/shared/wecomcli-smartsheet/references/smart-sheet-record-values.md +201 -0
  115. package/templates/shared/wecomcli-smartsheet/references/smart-sheet-view-types.md +356 -0
  116. package/templates/shared/wecomcli-smartsheet/references/smart-sheet-webhook-examples.md +176 -0
  117. package/templates/shared/wecomcli-smartsheet/references/smart-sheet-webhook.md +169 -0
  118. package/templates/shared/wecomcli-todo/SKILL.md +76 -0
  119. package/templates/shared/wecomcli-todo/references/todo-create.md +137 -0
  120. package/templates/shared/wecomcli-todo/references/todo-delete.md +63 -0
  121. package/templates/shared/wecomcli-todo/references/todo-finish.md +72 -0
  122. package/templates/shared/wecomcli-todo/references/todo-get.md +66 -0
  123. package/templates/shared/wecomcli-todo/references/todo-list.md +133 -0
  124. package/templates/shared/wecomcli-todo/references/todo-update.md +112 -0
  125. package/templates/staff/design/AGENTS.md +2 -1
  126. package/templates/staff/ecommerce/.agents/skills/ops-ecommerce/SKILL.md +6 -0
  127. package/templates/staff/ecommerce/AGENTS.md +49 -0
  128. package/templates/staff/ecommerce/BOOTSTRAP.md +23 -0
  129. package/templates/staff/ecommerce/IDENTITY.md +8 -0
  130. package/templates/staff/ecommerce/MEMORY.md +9 -0
  131. package/templates/staff/ecommerce/PRIORITIES.md +3 -0
  132. package/templates/staff/ecommerce/SOUL.md +5 -0
  133. package/templates/staff/ecommerce/USER.md +8 -0
  134. package/templates/staff/hr/.agents/skills/staff-onboard-keys/SKILL.md +3 -3
  135. package/templates/staff/publish/.agents/skills/ops-publish/SKILL.md +6 -0
  136. package/templates/staff/publish/AGENTS.md +59 -0
  137. package/templates/staff/publish/BOOTSTRAP.md +23 -0
  138. package/templates/staff/publish/IDENTITY.md +8 -0
  139. package/templates/staff/publish/MEMORY.md +9 -0
  140. package/templates/staff/publish/PRIORITIES.md +3 -0
  141. package/templates/staff/publish/SOUL.md +6 -0
  142. package/templates/staff/publish/USER.md +8 -0
@@ -0,0 +1,377 @@
1
+ # 文本处理公式函数 - CHAR, CONCAT, CONCATENATE, CONTAINTEXT, FIND, LEFT, LEN, LOWER, MID, REPLACE, RIGHT, SEARCH, SPLIT, SUBSTITUTE, TEXT, TEXTJOIN, TODATE, TRIM, UPPER
2
+
3
+ > 用于文本拼接、截取、替换、格式化、大小写转换等文本处理,适用于姓名格式规范化、文本拼接、日期格式化等场景。
4
+
5
+ ---
6
+
7
+ ## CHAR - 字符转换
8
+
9
+ **表达式**: `CHAR(数字)`
10
+
11
+ **函数说明**: 返回数字代码所对应的 Unicode 字符
12
+
13
+ **参数说明**: 数字:需要转换为 Unicode 的数字
14
+ - 10-换行符
15
+ - 32-空白键
16
+ - 48到57-数字0到9
17
+ - 65到90-大写字母A到Z
18
+ - 97到122-小写字母a到z
19
+
20
+ **示例**:
21
+ ```
22
+ CHAR(10) => \n // 换行符号
23
+ CHAR([数据表.数字字段]) => 各行的unicode
24
+ CHAR([页面.控件名称]) => unicode
25
+ ```
26
+
27
+ ---
28
+
29
+ ## CONCAT - 文本拼接
30
+
31
+ **表达式**: `CONCAT(文本1,[文本2,...])`
32
+
33
+ **函数说明**: 将多个文本拼接成单个文本。要拼接双引号,需要连续输入两个双引号。
34
+
35
+ **参数说明**: 文本1:要联接的文本项。 字符串或字符串数组,后续数值是可选的
36
+
37
+ **示例**:
38
+ ```
39
+ CONCAT([姓名], "-", [年龄])=> 小明 - 28
40
+ CONCAT("""", [产品名称], """") => "智能表格"
41
+ 注:[列名]表示引用了同一条记录中此列的单元格参与公式计算
42
+ [姓] & [名]
43
+ CONCAT([城市], "-", [区域])
44
+ ```
45
+
46
+ ---
47
+
48
+ ## CONCATENATE - 文本拼接
49
+
50
+ **表达式**: `CONCATENATE(字符串1, [字符串2, ...])`
51
+
52
+ **函数说明**: 可将两个或多个文本项连接成一个文本项。
53
+
54
+ **参数说明**:
55
+ - 文本1:必需,加入的第一个文本项
56
+ - 文本2:可选,要加入的其他文本项
57
+
58
+ **示例**:
59
+ ```
60
+ CONCATENATE("Hello"," ","World") => "Hello World"
61
+ ```
62
+
63
+ ---
64
+
65
+ ## CONTAINTEXT - 文本包含判断
66
+
67
+ **表达式**: `CONTAINTEXT(文本 ,查找文本)`
68
+
69
+ **函数说明**: 判断文本中是否包含要查找的文本
70
+
71
+ **参数说明**:
72
+ - 文本:查找范围,可以是一个文本或一个字段
73
+ - 查找文本:需要查找的文本
74
+
75
+ **示例**:
76
+ ```
77
+ CONTAINTEXT("智能表格","表格") => true
78
+ CONTAINTEXT([描述], "重要")
79
+ ```
80
+
81
+ ---
82
+
83
+ ## FIND - 查找位置
84
+
85
+ **表达式**: `FIND(查找的值, 查找范围, [起始位置])`
86
+
87
+ **函数说明**: 从指定位置开始查找值,找到值在查找范围中第一次出现的位置
88
+
89
+ **参数说明**:
90
+ - 查找的值:必需,要查找的值
91
+ - 查找范围:可以是多个值也可以是一个值
92
+ - 开始位置:可选,默认从1开始
93
+
94
+ **示例**:
95
+ ```
96
+ FIND("花", "人面桃花相映红") => 4
97
+ FIND("红", LIST("人","面","桃","花","相","映","红")) => 7
98
+ FIND(1, LIST(1,2,3)) => 1
99
+ FIND("@", [邮箱])
100
+ ```
101
+
102
+ ---
103
+
104
+ ## LEFT - 左侧截取
105
+
106
+ **表达式**: `LEFT(字符串, [字符数])`
107
+
108
+ **函数说明**: 从左提取字符串指定长度的子串
109
+
110
+ **参数说明**:
111
+ - 字符串:必需,包含要提取的字符的文本字符串
112
+ - 字符数:可选,指定要由LEFT提取的字符的数量
113
+
114
+ **示例**:
115
+ ```
116
+ LEFT("人面桃花相映红", 2) =>"人面"
117
+ LEFT([手机号], 3) // 前3位
118
+ ```
119
+
120
+ ---
121
+
122
+ ## LEN - 长度
123
+
124
+ **表达式**: `LEN(文本)`
125
+
126
+ **函数说明**: 返回文本字符串中的字符个数。
127
+
128
+ **参数说明**: 文本:必需,要查找其长度的文本。 空格将作为字符进行计数
129
+
130
+ **示例**:
131
+ ```
132
+ LEN("abcd") => 4
133
+ LEN([描述]) // 获取描述文字的长度
134
+ ```
135
+
136
+ ---
137
+
138
+ ## LOWER - 小写转换
139
+
140
+ **表达式**: `LOWER(文本)`
141
+
142
+ **函数说明**: 将文本中的全部大写字母替换为小写字母
143
+
144
+ **参数说明**: 文本:必需,要转换为小写的字符串
145
+
146
+ **示例**:
147
+ ```
148
+ LOWER("SmartSheet") => "smartsheet"
149
+ LOWER([城市])
150
+ ```
151
+
152
+ ---
153
+
154
+ ## MID - 中间截取
155
+
156
+ **表达式**: `MID(文本, 开始位置, 提取长度)`
157
+
158
+ **函数说明**: 提取字符串中从指定开始位置开始的指定提取长度的字符串
159
+
160
+ **参数说明**:
161
+ - 文本:必需,包含要提取字符的文本字符串
162
+ - 开始位置:必需,文本中要提取的第一个字符的位置。 文本中第一个字符的开始位置为 1,以此类推
163
+ - 提取长度:必需,指定希望 MID 从文本中返回字符的个数
164
+
165
+ **示例**:
166
+ ```
167
+ MID("腾讯文档智能表格",5,4) => "智能表格"
168
+ MID([身份证号], 7, 8) // 提取出生日期
169
+ ```
170
+
171
+ ---
172
+
173
+ ## REPLACE - 替换
174
+
175
+ **表达式**: `REPLACE(文本, 位置, 长度, 新文本)`
176
+
177
+ **函数说明**: 将文本中指定位置和长度的部分文本替换为新文本
178
+
179
+ **参数说明**:
180
+ - 文本:必需。要对其局部进行替换操作的文本
181
+ - 替代位置:必需。开始进行替换操作的位置(文本开头位置为1)
182
+ - 字符数:必需。要在文本中替换的字符个数
183
+ - 新文本:可选。未必需。要插入到原有文本中的文本
184
+
185
+ **示例**:
186
+ ```
187
+ REPLACE("人面桃花相映红", -5, -1, "梨") =>"人面梨花相映红"
188
+ REPLACE([手机号], 4, 4, "****")
189
+ ```
190
+
191
+ ---
192
+
193
+ ## RIGHT - 右侧截取
194
+
195
+ **表达式**: `RIGHT(字符串, [字符数])`
196
+
197
+ **函数说明**: 从右提取字符串指定长度的子串
198
+
199
+ **参数说明**:
200
+ - 字符串:必需,包含要提取字符的文本字符串
201
+ - 字符数:可选,指定希望RIGHT提取的字符数
202
+
203
+ **示例**:
204
+ ```
205
+ RIGHT("人面桃花相映红", 2) =>"映红"
206
+ RIGHT([手机号], 4) // 后4位
207
+ ```
208
+
209
+ ---
210
+
211
+ ## SEARCH - 查找位置
212
+
213
+ **表达式**: `SEARCH(查询文本,被查询文本,[编号])`
214
+
215
+ **函数说明**: 可在第二个文本字符串中查找第一个文本字符串,并返回第一个文本字符串的起始位置的编号,该编号从第二个文本字符串的第一个字符算起。
216
+
217
+ **参数说明**:
218
+ - 查询文本:必需,要查找的文本
219
+ - 被查询文本:必需,要在其中搜索查询文本参数的值的文本
220
+ - 编号:可选,被查询文本参数中从之开始搜索的字符编号
221
+
222
+ **示例**:
223
+ ```
224
+ SEARCH("e","Hello",1) => 2
225
+ SEARCH("公司", [公司名称])
226
+ ```
227
+
228
+ ---
229
+
230
+ ## SPLIT - 分割
231
+
232
+ **表达式**: `SPLIT(文本, 分隔符)`
233
+
234
+ **函数说明**: 使用分隔符对文本进行分割
235
+
236
+ **参数说明**:
237
+ - 文本:要拆分的文本
238
+ - 分隔符:用于拆分文本的一个或多个字符
239
+
240
+ **示例**:
241
+ ```
242
+ SPLIT("智-能-表-格","-")=> "智","能","表","格"
243
+ SPLIT([标签], ",")
244
+ ```
245
+
246
+ ---
247
+
248
+ ## SUBSTITUTE - 文本替换
249
+
250
+ **表达式**: `SUBSTITUTE(要替换部分字符的文本, 被替换文本, 替换文本, [被替换文本序号])`
251
+
252
+ **函数说明**: 可在某一文本字符串中用新文本替代指定的旧文本。
253
+
254
+ **参数说明**:
255
+ - 文本:必需,包含要替换字符的旧文本单元格的文本或引用
256
+ - 被替换文本:必需,要被替换的文本
257
+ - 新文本:必需,用于替换旧文本的文本
258
+ - 替换位置:可选,指定要用新文本替换的旧文本的出现位置。默认情况下,所有出现的旧文本都被替换; 但是如果指定替换位置,则仅替换指示的实例
259
+
260
+ **示例**:
261
+ ```
262
+ SUBSTITUTE("hello world","hello","Hello") => "Hello world"
263
+ SUBSTITUTE([手机号], " ", "") // 去除空格
264
+ ```
265
+
266
+ ---
267
+
268
+ ## TEXT - 格式化为文本
269
+
270
+ **表达式**: `TEXT(数值,格式)`
271
+
272
+ **函数说明**: 按指定格式将数字转为文本
273
+
274
+ **参数说明**:
275
+ - 数值:必需,要转换为文本的数值
276
+ - 格式:必需,一个文本字符串,定义要应用于所提供值的格式
277
+ - "YYYY/MM/DD"(年月日)
278
+ - "YYYY" (年份全称)
279
+ - "YY" (年份简称)
280
+ - "MMM" (月份全称)
281
+ - "MM" (月份数字全写)
282
+ - "M" (月份数字)
283
+ - "DD"(日数字全写)
284
+ - "D"(日数字)
285
+ - "DDDD"(星期全称)
286
+ - "DDD"(星期简称)
287
+ - "hh" (小时)
288
+ - "mm" (分钟)
289
+ - "ss" (秒钟)
290
+ - "0.0%"(百分比)
291
+ - "0,0" (千位分隔符)
292
+ - "0" (数字补位符)
293
+ - "#" (数字占位符)
294
+
295
+ **示例**:
296
+ ```
297
+ TEXT("2026-05-14", "ddd")=> 周四
298
+ TEXT("2026-05-14", "YYYY")=> 2026
299
+ TEXT("2026-05-14", "MM")=> 05
300
+ TEXT("2026-05-14", "M")=> 5
301
+ TEXT("19:30", "HH")=> 19
302
+ TEXT("19:30", "HH:MM")=> 19:30
303
+ TEXT("19:30:34", "HH:MM")=> 19:30
304
+ TEXT(0.3,"0.00%")=> 30.00%
305
+ TEXT(1.23,"##.#")=> 1.2
306
+ TEXT(1.23,"00.0")=> 01.2
307
+ TEXT(TODAY(), "YYYY-MM-DD")
308
+ TEXT([金额], "#,##0.00")
309
+ ```
310
+
311
+ ---
312
+
313
+ ## TEXTJOIN - 文本连接
314
+
315
+ **表达式**: `TEXTJOIN(分隔符,空白值,文本1,[文本2,...])`
316
+
317
+ **函数说明**: TEXTJOIN函数将多个区域和/字符串的文本组合起来,并可以在要组合的各文本值之间插入指定的分隔符。如果分隔符是空的文本字符串,则此函数将有效连接这些区域。
318
+
319
+ **参数说明**:
320
+ - 分隔符:必需。文本字符串(空)或一个或多个用双引号括起来的字符,或对有效文本字符串的引用。如果提供了一个数字,它将被视为文本
321
+ - 空白值:必需。如果为TRUE,则忽略空白单元格
322
+ - 文本1:必需。要加入的文本项。文本字符串或字符串数组
323
+ - 文本2:可选。要加入的其他文本项
324
+
325
+ **示例**:
326
+ ```
327
+ TEXTJOIN(" ",TRUE,"hello","world") => "hello world"
328
+ TEXTJOIN(", ", TRUE, [姓名1], [姓名2], [姓名3])
329
+ ```
330
+
331
+ ---
332
+
333
+ ## TODATE - 文本转日期
334
+
335
+ **表达式**: `TODATE(文本)`
336
+
337
+ **函数说明**: 将文本转成日期格式
338
+
339
+ **参数说明**: 文本:要转的文本值
340
+
341
+ **示例**:
342
+ ```
343
+ TODATE("2026-5-9")=> 2026/05/09
344
+ TODATE("2026-01-01")
345
+ ```
346
+
347
+ ---
348
+
349
+ ## TRIM - 去除空格
350
+
351
+ **表达式**: `TRIM(文本)`
352
+
353
+ **函数说明**: 移除文本中最前和最后的空格
354
+
355
+ **参数说明**: 文本:要移除空格的文本
356
+
357
+ **示例**:
358
+ ```
359
+ TRIM(" 智能 表格 ")=>智能 表格
360
+ TRIM([姓名])
361
+ ```
362
+
363
+ ---
364
+
365
+ ## UPPER - 大写转换
366
+
367
+ **表达式**: `UPPER(文本)`
368
+
369
+ **函数说明**: 将文本中的全部小写字母替换为大写字母
370
+
371
+ **参数说明**: 文本:必需,要转换为大写的字符串
372
+
373
+ **示例**:
374
+ ```
375
+ UPPER("SmartSheet")=> "SMARTSHEET"
376
+ UPPER([邮箱])
377
+ ```
@@ -0,0 +1,22 @@
1
+ # 用户信息公式函数 - USER
2
+
3
+ > 用于获取当前登录用户信息(头像、姓名、企业名称),适用于个人任务筛选、数据权限控制、我的待办等场景。
4
+
5
+ ---
6
+
7
+ ## USER - 当前用户
8
+
9
+ USER()
10
+
11
+ 返回当前查看页面的用户对象。
12
+
13
+ **示例**:
14
+
15
+ // 筛选当前用户负责的任务
16
+ [任务表].FILTER([Each].[负责人] = USER())
17
+
18
+ // 判断是否为当前用户创建的记录
19
+ IF([创建人] = USER(), "我创建的", "他人创建")
20
+
21
+ // 获取当前用户名称(需要根据实际字段结构调整)
22
+ [用户表].FILTER([Each].[用户] = USER()).[姓名].FIRST()
@@ -0,0 +1,192 @@
1
+ # 公式字符串语法指南
2
+
3
+ ## 概述
4
+
5
+ 公式字符串是智能文档(智能主页 / smartpage)中用于动态计算和数据处理的核心能力,可用于:
6
+
7
+ - 引用数据表字段或页面控件
8
+ - 执行函数运算与四则运算
9
+ - 表单字段自动计算
10
+ - 实现复杂的业务逻辑
11
+
12
+ **重要约束**:
13
+
14
+ - 公式中优先使用语义化引用:`[页面名.控件名]`、`[表名.字段名]`、`[字段名]`(仅限当前记录上下文),避免直接使用控件id。
15
+ - 公式系统**仅支持**本目录下文档列出的函数与运算符;未列出的(如取模 `%`、三元 `?:`)一律不支持,遇到无法表达的需求应直接告知用户。
16
+ - 字符串值用**双引号**包裹(如 `"完成"`),不能用单引号。
17
+ - 函数用法以本文档为准,不要凭 Excel/JS 经验编写。
18
+
19
+ ## 函数分类索引
20
+
21
+ 按需求场景定位对应文档;一个需求涉及多类时,逐条查阅。
22
+
23
+ | 分类 | 适用场景 / 关键能力 | 查阅文档 |
24
+ | --- | --- | --- |
25
+ | 日期时间 | 日期构造 DATE、当前日期 NOW/TODAY、日期比较与差值、工作日计算;倒计时、工龄、截止日期判断 | [formula/datetime.md](formula/datetime.md) |
26
+ | 用户信息 | 获取当前登录用户信息;个人任务筛选、数据权限、我的待办 | [formula/user.md](formula/user.md) |
27
+ | 数学计算 | SUM、AVERAGE、MAX/MIN、COUNT/COUNTA、COUNTIF、SUMIF、ROUND 等数值计算与统计汇总;金额计算 | [formula/math.md](formula/math.md) |
28
+ | 逻辑判断 | IF、AND、OR、ISBLANK 条件判断与空值/错误处理;数据校验、状态显示、条件渲染 | [formula/logic.md](formula/logic.md) |
29
+ | 文本处理 | 文本拼接 `&`、LEFT/RIGHT 截取、SUBSTITUTE 替换、格式化、大小写;姓名规范化、日期格式化 | [formula/text.md](formula/text.md) |
30
+ | 数组列表 | FILTER 筛选、数组提取/合并/去重;数据统计、关联查询、列表处理 | [formula/arraylist.md](formula/arraylist.md) |
31
+ | 页面动作 | 打开外部链接、跳转页面、按钮点击修改数据(OPENLINK / MODIFYRECORDS / ADDRECORD) | [formula/pageblock.md](formula/pageblock.md) |
32
+ | 运算符 | 四则运算 `+-*/`、比较运算 `> < =`、文本拼接 `&`;条件筛选、数值计算 | [formula/operators.md](formula/operators.md) |
33
+ | 实用模板 | 排名、环比增长、重复标记、进度跟踪、日期提醒、工龄计算、逾期判断等开箱即用模板 | [formula/templates.md](formula/templates.md) |
34
+
35
+ ## 公式语法
36
+
37
+ ### 引用语法
38
+
39
+ 页面公式(按钮 `formulaString`、`<formulaSpan>`、控件 `defaultValueFormula` 等)**优先使用下列三种带前缀的语义化引用形式**;禁止使用裸字段(如 `[字段名]`)。
40
+
41
+ | 引用对象 | 写法 | 说明 |
42
+ | --- | --- | --- |
43
+ | 数据表字段 | `[表名.字段名]` | 返回该字段在整张表中的值数组;`表名` 用数据表实际名称、`字段名` 用 `field.name`,不要写 `tableId`/`blockId` |
44
+ | 整张数据表 | `[表名]` | 用于配合 `.FILTER()`、`.COUNTA()` 等链式调用 |
45
+ | 页面控件 | `[页面名.控件名]` | `页面名` 是页面实际名称,`控件名` 是控件的 `title`/`name`;必须带页面名前缀 |
46
+
47
+ **示例**
48
+
49
+ ```
50
+ [销售表.金额] // 数据表字段
51
+ [订单表] // 整张表
52
+ [学生信息页.学生姓名] // 页面控件
53
+ ```
54
+
55
+ **通用规则**
56
+
57
+ - 表名、字段名、页面名、控件名一律放在方括号 `[]` 内
58
+ - 字符串值用双引号 `""` 包裹(`"是"`、`"否"`)
59
+ - 函数名全大写(`SUM`、`FILTER`、`IF`)
60
+
61
+ ## 常见错误
62
+
63
+ ### 字段引用格式错误
64
+
65
+ ```
66
+ // [反例] 页面公式省略表名(裸字段)
67
+ [销售额].SUM()
68
+
69
+ // [正例] 必须 [表名.字段名]
70
+ [销售表.销售额].SUM()
71
+ ```
72
+
73
+ ### 引号使用错误
74
+
75
+ ```
76
+ // [反例] 单引号
77
+ IF([状态] = '完成', "是", "否")
78
+
79
+ // [正例] 双引号
80
+ IF([状态] = "完成", "是", "否")
81
+ ```
82
+
83
+ ### 括号不匹配
84
+
85
+ ```
86
+ // [反例] 缺少闭合括号
87
+ IF([金额] > 1000, "大额"
88
+
89
+ // [正例]
90
+ IF([金额] > 1000, "大额", "小额")
91
+ ```
92
+
93
+ ### 类型不匹配
94
+
95
+ ```
96
+ // [反例] 文本字段做数学加法
97
+ [员工表.姓名] + [员工表.年龄]
98
+
99
+ // [正例] 文本拼接用 &
100
+ [员工表.姓名] & " " & [员工表.年龄]
101
+ ```
102
+
103
+ ### FILTER / IF 多条件未包裹
104
+
105
+ 多条件必须包在 `AND()` 或 `OR()` 内,不能在同一层级散写:
106
+
107
+ ```
108
+ // [反例]
109
+ [任务表].FILTER([Each].[状态]="完成", [Each].[金额]>1000)
110
+
111
+ // [正例]
112
+ [任务表].FILTER(AND([Each].[状态]="完成", [Each].[金额]>1000))
113
+ ```
114
+
115
+ ### 人员(user)字段的特殊规则
116
+
117
+ - **筛选**:推荐用 `CONTAINTEXT`(全等比较容易因显示名差异失败);与 `USER()` 比较时可使用 `=`:
118
+
119
+ ```
120
+ [表.人员列].FILTER([Each].CONTAINTEXT("<英文名>(<中文名>)")).FIRST()
121
+ [任务表].FILTER([Each].[负责人] = USER())
122
+ ```
123
+
124
+ - **赋值**:人员字段不支持直接用文本字面值赋值。`ADDRECORD([表], [表.人员列], "人名")` 是错的;应使用 `USER()` 或通过 `FILTER` 取其他人员列的值赋值。
125
+
126
+ ## 场景示例
127
+
128
+ ### 示例 1:销售数据分析
129
+
130
+ ```
131
+ // 总销售额
132
+ [订单表.金额].SUM()
133
+
134
+ // 平均订单金额
135
+ [订单表.金额].AVERAGE()
136
+
137
+ // 大客户订单数量(金额 > 10000)
138
+ [订单表].FILTER([Each].[金额] > 10000).[订单号].COUNTA()
139
+
140
+ // 本月订单总额
141
+ [订单表].FILTER(MONTH([Each].[日期]) = MONTH(TODAY())).[金额].SUM()
142
+
143
+ // 统计销售额大于1000的销售总和
144
+ [商品销售表.销售额].SUMIF([Each]>1000)
145
+ ```
146
+
147
+ ### 示例 2:任务管理
148
+
149
+ ```
150
+ // 已完成任务数
151
+ [任务表].FILTER([Each].[状态] = "完成").[任务名].COUNTA()
152
+
153
+ // 我负责的任务数(负责人为人员字段)
154
+ // 方法 1:与 USER() 直接比较
155
+ [任务表].FILTER([Each].[负责人] = USER()).[任务名].COUNTA()
156
+
157
+ // 方法 2:用 CONTAINTEXT 按文本匹配(推荐,规避显示名差异)
158
+ [任务表].FILTER([Each].[负责人].CONTAINTEXT("zhangsan")).[任务名].COUNTA()
159
+
160
+ // 超期任务数
161
+ [任务表].FILTER(AND([Each].[截止日期] < TODAY(), [Each].[状态] <> "完成")).[任务名].COUNTA()
162
+
163
+ // 任务完成率
164
+ [任务表].FILTER([Each].[状态] = "完成").[任务名].COUNTA() / [任务表.任务名].COUNTA() * 100
165
+
166
+ // 项目总预算
167
+ [项目主表.预算].SUM()
168
+ ```
169
+
170
+ ### 示例 3:员工信息
171
+
172
+ ```
173
+ // 部门人数(页面公式写法:使用完整表名前缀)
174
+ [员工表].FILTER([Each].[部门] = "研发部").[姓名].COUNTA()
175
+
176
+ // 平均工龄
177
+ [员工表.入职日期].AVERAGE()
178
+
179
+ // 全名(页面公式中需使用 [表名.字段名])
180
+ [员工表.姓] & [员工表.名]
181
+
182
+ // 工作年限(页面公式中需使用 [表名.字段名])
183
+ DATEDIF([员工表.入职日期], TODAY(), "Y")
184
+ ```
185
+
186
+ ### 示例 4:添加记录
187
+
188
+ ```
189
+ // 配合button使用,将页面1中各种类别的数据写入各个字段
190
+ // ADDRECORD中不允许省略数据表、页面名
191
+ ADDRECORD([数据表], [数据表.字段1], [页面1.输入控件名], [数据表.字段2], "静态文本", [数据表.字段3], [页面1.公式名])
192
+ ```