WPS AirScript脚本合集(二四):脚本咋写!召唤AI牛马闪亮登场
在这个遍地AI的时代
无形之中我们已经养成了一种习惯遇到问题怎么办?召唤个AI先行探路!
同样地,
现在写脚本代码小林基本不会从头开写都是左手一个AI右手一个AI先输入自己的需求AI给方案后再一步步细化
今天小林不分享XX应用场景下的Air Script脚本来看看小林是如何携手AI一起创出可行的脚本吧
友情说明:AI提供的回答存在概率性正确,有时简单场景AI编写的脚本能顺利执行,复杂场景还是离不开人为经验辅助滴~以下内容仅作执行思路分享哟

一、WPS开发平台内置AI

举个例子:如何写WPS Air Script脚本获取多维表格指定数据表的字段信息?看到这个问题,小林的第一反应是打开浏览器进入WPS开放平台(指路链接:https://open.wps.cn/documents/app-integration-dev/guide/start/learn-map),直接问WPS AI ”WPS Air Script脚本如何编写获取多维表格指定数据的字段信息“然后AI就会哐哐哐给你一个长长的答案

AI回答末端还附上问题拓展和相关文档链接,方便查看引用的知识进行核验有点体验不太好的是,这个窗口太小没法移动和调整大小,历史会话没法归类和存档

而且点击相关文档链接会页面跳转失败,拿GetFields来说,点击链接后页面跳转的URL是https://open.wps.cn/documents/app-integration-dev/guide/dbsheet/Api/Sheet_GetFields

实际上正确的URL应该是https://open.wps.cn/documents/app-integration-dev/guide/dbsheet/Api/Api/Sheet/Methods/GetFields

(怎么感觉有股翻车的味道,希望哪天官方能修正下AI引用的文档链接吧ε-(´∀`; )
AI提供的回答如下:
使用WPS AirScript获取多维表格字段信息的方法
在WPS AirScript中,您可以通过以下几种方式获取多维表格的字段信息:
1. 使用GetFields()方法获取全部字段
这是最直接的方式,可以获取当前活动工作表的所有字段信息:
function main(){// 获取当前活动工作表的所有字段const fields = Application.ActiveSheet.GetFields();// 遍历并打印字段信息for (let i = 0; i < fields.Count; i++) {const field = fields.Item(i + 1);console.log(`字段名称: ${field.Name}`);console.log(`字段ID: ${field.Id}`);console.log(`字段类型: ${field.Type}`);// 可以根据需要获取更多字段属性}}
2. 通过记录操作获取特定字段
您也可以通过操作记录来获取特定字段的值:
function main(){// 获取第一条记录的字段值const record = Application.ActiveView.RecordRange(1, 1);console.log(record.Text); // 获取文本值console.log(record.Value); // 获取原始值// 获取特定字段的值(需要知道字段名称或ID)const specificValue = Application.ActiveView.RecordRange(1, 1).Fields["字段名"].Text;console.log(specificValue);}
3. 在自动化流程中获取字段信息
如果您是在自动化流程中使用AirScript,可以通过参数传递来获取特定字段信息:
function main(params){// params是从自动化流程传递的参数const targetField = params.fieldName;const value = Application.ActiveView.RecordRange(1, 1).Fields[targetField].Text;console.log(`字段${targetField}的值是: ${value}`);}
注意事项
-
使用这些方法前,请确保脚本有足够的权限访问多维表格
-
字段名称和ID区分大小写
-
对于复杂字段类型(如附件、选项等),可能需要特殊处理
-
在生产环境中使用时,建议添加错误处理逻辑
扩展功能
如果需要更复杂的字段操作,您还可以:
-
创建新字段
-
修改字段属性
-
删除字段
-
设置字段验证规则
这些操作都可以通过AirScript的API实现。
相关问题:
-
AirScript脚本中获取字段信息的语法是什么?
-
如何通过API获取多维表格字段信息?
-
AirScript脚本如何修改单元格内容?
相关文档:
-
按页列举记录
-
列举记录
-
简介
-
云文档 API
-
快速入门
-
获取数据库表字段信息
-
GetFields
-
检索记录
-
GetFields.md
我们先抽取方式一“使用GetFields()方法获取全部字段”进行验证,假设多维表数据表字段如图:

将方式一的脚本代码直接复制粘贴到脚本编辑器中(CV工程师登场o(^▽^)o然后直接点击运行其实有编程基础的看眼代码就不难判断,这个答案大概率是要翻车的(因为窝的需求是如何写WPS Air Script脚本获取多维表格指定数据表的字段信息说了要指定数据表,怎么可能连个数据表名称都不用写进去呢?!)果不其然,翻车叻( ̄▽ ̄)

运行日志显示执行完毕,但字段名称、字段ID、字段类型内容都没有输出显然不是一个符合需求的脚本哇那该咋办呢?转头PUA下AI吧~

这次AI给的回答是
指定数据表名获取字段信息的WPS AirScript脚本
要根据数据表名(而非ActiveSheet)获取字段信息,可以使用以下方法:
方法一:通过Sheets集合按名称获取
function main(){// 指定数据表名const sheetName = "你的数据表名称";// 通过名称获取指定数据表const sheet = Application.Sheets(sheetName);// 获取该数据表的所有字段const fields = sheet.GetFields();// 遍历并打印字段信息for (let i = 0; i < fields.Count; i++) {const field = fields.Item(i + 1);console.log(`字段名称: ${field.Name}`);console.log(`字段ID: ${field.Id}`);console.log(`字段类型: ${field.Type}`);// 可以根据需要获取更多字段属性}}
方法二:通过Sheets索引获取
function main(){// 通过索引获取指定数据表(索引从1开始)const sheet = Application.Sheets(1); // 获取第一个数据表// 获取该数据表的所有字段const fields = sheet.GetFields();// 遍历并打印字段信息for (let i = 0; i < fields.Count; i++) {const field = fields.Item(i + 1);console.log(`字段名称: ${field.Name}`);console.log(`字段ID: ${field.Id}`);console.log(`字段类型: ${field.Type}`);}}
方法三:结合使用名称和索引
function main(){// 获取所有数据表数量const sheetCount = Application.Sheets.Count;// 查找指定名称的数据表const targetSheetName = "目标数据表";let targetSheet = null;for (let i = 1; i <= sheetCount; i++) {const sheet = Application.Sheets(i);if (sheet.Name === targetSheetName) {targetSheet = sheet;break;}}if (targetSheet) {// 获取该数据表的所有字段const fields = targetSheet.GetFields();// 遍历并打印字段信息for (let i = 0; i < fields.Count; i++) {const field = fields.Item(i + 1);console.log(`字段名称: ${field.Name}`);console.log(`字段ID: ${field.Id}`);console.log(`字段类型: ${field.Type}`);}} else {console.log(`未找到名称为${targetSheetName}的数据表`);}}
注意事项
-
数据表名称区分大小写
-
如果数据表名称不存在,脚本会抛出错误,建议添加错误处理
-
可以通过Application.Sheets.Count获取数据表总数
-
字段信息可以通过Fields集合访问
错误处理示例
function main(){try {const sheetName = "你的数据表名称";const sheet = Application.Sheets(sheetName);const fields = sheet.GetFields();for (let i = 0; i < fields.Count; i++) {const field = fields.Item(i + 1);console.log(`字段名称: ${field.Name}`);}} catch (error) {console.log("发生错误:", error.message);}}
依旧CV一下试试效果还是翻车了呢(耐心-1-1-1

都指定数据表了为什么还是不行窝要让每个变量都现原形!!!
console.log大法开!

从运行日志输出情况来看,其实是能获取到数据表信息的但为什么没发打印字段信息,经验老手一眼可断定,变量取值写错了那咋改呢?什么,你让我改?不不不,派AI小弟出马豆包先打个头阵吧脚本代码和运行结果一股脑扔进去眨眼间豆包就给出答案啦

来试试豆包给的答案吧,再次CV CV哎哟,不错哟,脚本没报错一遍过~

总结下整体操作流程就是:如果你需要编写WPS功能相关脚本可以在WPS开放平台向WPS AI输入功能需求描述此时WPS AI会提供一些如何调用对应接口或函数的方案测试脚本执行情况,如报错可转向其他AI协助修改代码逻辑问题
那能直接让其他AI如豆包写相关调用WPS API的脚本吗?其实也不是不行,只不过豆包相对于WPS内置的AI,对WPS内部API调用相关方法或函数不够熟悉,大概率会假设一些不存在的函数来调用给方案交差,运行结果当然是报错啦
再举个栗子🌰:写一个WPS Air Script脚本获取指定数据表所有记录内容豆包给的方案:

豆包给的方案执行情况,翻车

那来试试WPS AI吧测试情况如下:

具体回答内容
获取指定数据表所有记录内容的WPS AirScript脚本
以下是获取指定数据表所有记录内容的完整脚本实现:
方法一:通过RecordRange获取全部记录
function main(){try {// 1. 指定数据表名称const sheetName = "你的数据表名称";// 2. 获取指定数据表const sheet = Application.Sheets(sheetName);// 3. 获取数据表的所有记录范围const recordRange = sheet.RecordRange;// 4. 获取记录总数const recordCount = recordRange.Count;console.log(`数据表"${sheetName}"共有${recordCount}条记录`);// 5. 遍历所有记录for (let i = 1; i <= recordCount; i++) {const record = recordRange.Item(i);console.log(`记录${i}:`, record.Text); // 获取记录文本内容// 如果需要获取特定字段值// const fieldValue = record.Range(1,1).Text; // 获取第1列的值}} catch (error) {console.error("执行出错:", error);}}
方法二:通过ActiveView获取记录(适用于当前视图)
function main(){try {// 获取当前活动视图的记录范围const recordRange = Application.ActiveView.RecordRange;const recordCount = recordRange.Count;console.log(`当前视图共有${recordCount}条记录`);for (let i = 1; i <= recordCount; i++) {const record = recordRange.Item(i);console.log(`记录${i}:`, record.Text);// 获取特定单元格值// console.log(Application.ActiveView.RecordRange(i,1).Text); // 第i行第1列}} catch (error) {console.error("执行出错:", error);}}
方法三:结合字段信息获取结构化数据
function main(){try {const sheetName = "你的数据表名称";const sheet = Application.Sheets(sheetName);// 获取字段信息const fields = sheet.GetFields();const recordRange = sheet.RecordRange;// 打印表头let header = "";for (let i = 0; i < fields.Count; i++) {const field = fields.Item(i + 1);header += `${field.Name}\t`;}console.log(header);// 打印记录内容for (let i = 1; i <= recordRange.Count; i++) {let rowData = "";for (let j = 1; j <= fields.Count; j++) {const cellValue = recordRange.Item(i).Range(1, j).Text; // 获取第i行第j列的值rowData += `${cellValue}\t`;}console.log(rowData);}} catch (error) {console.error("执行出错:", error);}}
注意事项
-
数据表名称区分大小写,需确保与多维表格中的名称完全一致
-
大量记录获取可能影响性能,建议分页处理
-
如果记录中包含附件等复杂类型,需要特殊处理
-
确保脚本有足够的权限访问目标数据表
-
在生产环境中建议添加更完善的错误处理机制
性能优化建议
对于大型数据表,可以考虑以下优化方案:
function main(){try {const sheetName = "大型数据表";const sheet = Application.Sheets(sheetName);const recordRange = sheet.RecordRange;const batchSize = 100; // 每批处理100条for (let i = 1; i <= recordRange.Count; i += batchSize) {const end = Math.min(i + batchSize - 1, recordRange.Count);console.log(`正在处理记录 ${i} 到 ${end}`);for (let j = i; j <= end; j++) {const record = recordRange.Item(j);// 处理记录...}}} catch (error) {console.error("执行出错:", error);}}
相关文档:
-
查询记录列表
-
RecordRange
-
查询记录
-
快速入门
-
云文档 API
-
GetFields
-
GetFields.md
-
检索记录
-
获取数据库表字段信息
脚本执行结果如何?居然一遍过诶

总结下要点就是:想写 WPS 功能类脚本,可先问 WPS AI 出初稿,再用其他 AI 辅助优化代码逻辑。

二、WPS 灵犀Claw

@#¥%%……&*(&……¥#
由于文章太长了,小林把这部分内容挪到下一篇了,标题就留在做个剧透啦~
措不及防来Happy Ending,Bye Bye^_−☆
往期推荐 ·盲选时刻
点兵点将,点到谁就是谁!









关注博主不迷路,开启缘分第一步~
带你见证一个普通小厂搬砖人的牛马人生!
请在微信客户端打开
夜雨聆风