一、引入
金山在线表格是一款功能强大、易用便捷的在线表格工具,支持多人实时在线协作、高效的数据处理与分析以及灵活的权限管理功能。它适用于各种需要进行数据处理、分析与团队协作的场景,能够帮助用户提高办公效率、保障数据安全并提升团队协作能力。然对于开发者来说,在线表格可以看作一个小型数据库,通过官方提供的接口实现线上与线下数据互通。
二、官方接口介绍
1、如何查询官方接口文档
首先,随意打开或新建一个在线表格,然后点击菜单栏的“效率·····>高级开发·····>AirScript脚本编辑器”打开如下所示页面:
随后,点击脚本编辑器右上方的问号,再在切换的页面中点击“文档中心”按钮,即可进入官方文档界面,如下图所示:
进入到上图所示界面后,在左边目录栏中,有一个脚本令牌,接口文档就在其中。
2、官方提供的接口介绍
2.1、脚本令牌
要想实现线上表格自动化,开发者可以通过 AirScript 编辑器来编写脚本,AirScript 编辑器使用的语言是AirScript,属于Script系列语言,与JS非常类似,很多方法可以通用。编写好脚本后,可以通过定时任务来实现自动化。然而,这样去做,如果逻辑过于复杂或涉及数据较多时会导致在线表格卡顿,或者是多个使用者同时打开同一个在线表格时也会给表格造成一定的压力。为解决这一问题,我们可以通过脚本令牌与官方提供的接口在线下实现数据的统计。
那么,什么是脚本令牌?脚本令牌又该如何创建呢?
脚本令牌即 APIToken,是我们为外部系统引入 AirScript 能力而专门设计的。通过脚本令牌,您可以轻松使用到金山文档 AirScript 提供的能力,执行脚本获取文档数据或者是向文档中写入数据。换句话说,脚本令牌就是官方接口的密钥,它类似于高德、百度等地图API的Key。
关于脚本令牌的创建,大家不用参照官方文档,现在的界面已经变了,与文档中的界面不一致。如下图所示:
点击编辑器上方盾牌符号即可创建。注意:脚本令牌只有本人在创建时可见,所以创建后需及时复制,然后将其保存,否则需要删除重新创建。除非少侠能过目不忘。另外,脚本令牌有一个使用时间,如果过期点击延期即可,无需重建。
2.2、接口介绍
官方接口分为两种,一是同步执行脚本,二是异步执行脚本,这两种都是POST请求。
同步:POST /api/v3/ide/file/:file_id/script/:script_id/sync_task
异步:POST /api/v3/ide/file/:file_id/script/:script_id/task
接口需要的参数,在官方文档中有详细的说明,这里UP就不一一列举了,如下图所示:
2.3、完整接口的复制
在编辑器中,我们可以直接复制完整的接口,如下图所示:
注意:复制下来的时同步接口,如果需要异步接口,按照异步接口样式修改即可。
2.4、官方文档给出的JS代码
为方便用户,官方特意给出示例代码,其中包含PHP、Python、Java、JS等语言的示例代码,然而,关于JS的示例代码,无法在WPS的编辑器中直接运行,如下所示:
const data = JSON.stringify({
"Context": {
"argv": {},
"sheet_name": "表名",
"range": "$B$156"
}
});
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("POST", "https://www.kdocs.cn/api/v3/ide/file/:file_id/script/:script_id/task");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("AirScript-Token", "xxx");
xhr.send(data);
可以看到,它使用了addEventListener这一监听事件,我们在XHR对象的介绍中讲解过,在WPS中不支持这一监听事件,我们需要将其修改成其他的事件函数。相信你一定想到了吧,是的,就是onreadystatechange 这一监听函数,他与addEventListener类似,只是没有它灵活而已。因此要想在WPS编辑器中使用,我们需要将其修改为:
const data = JSON.stringify({
"Context": {
"argv": {},
"sheet_name": "表名", // 执行时的表名称(可省)
"range": "$B$156" // 运行时的单元格区域(可省)
}
});
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
let jsonData=xhr.responseText;
let data1 = JSON.parse(jsonData); // 返回的是一个JSON字符串
res=data1.data.result;
};
});
xhr.open("POST", "https://www.kdocs.cn/api/v3/ide/file/:file_id/script/:script_id/task");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("AirScript-Token", "xxx");
xhr.send(data);
这样我们就能在WPS编辑其中使用了。
2.5、UP曾经的案例展示
上述是一个线上考勤表格的填写数据。部分代码如下所示:
class Events{
constructor(url,token,url_get){
this.url = "https://www.kdocs.cn/*************sync_task";
this.token = "****************";
this.url_get = "https://***************/sync_task";
}
//上传到在线表格
sendData(path, url, token){
var wb = Workbooks.Open(path);
var sht = Sheets(1);
var arr = sht.Range("A1").CurrentRegion.Value2;
wb.Close();
arr = arr.slice(1);
var obj = tran_to_obj(transpose(arr));
const data = JSON.stringify({"Context": {"argv": obj}});
var xhr=new XMLHttpRequest();
xhr.withCredentials = true;
xhr.open("POST",url,false);
xhr.setRequestHeader('Content-type','application/json')
xhr.setRequestHeader("AirScript-Token", token);
xhr.send(data);
}
//下载数据到线下表格
downloadData(url,token){
var res;
const data = JSON.stringify({"Context": {"argv": {}}});
var xhr=new XMLHttpRequest();
xhr.withCredentials = true;
xhr.open("POST",url,false);
xhr.setRequestHeader('Content-type','application/json')
xhr.setRequestHeader("AirScript-Token", token);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var jsonData=xhr.responseText;
var data1 = JSON.parse(jsonData);
res=data1.data.result;
};
};
xhr.send(data);
return res;
}
}
上述代码中,只保留了上传与下载数据的代码,其他数据处理的代码与本节内容无关已经删除。
三、总结
总的来说,在脚本令牌的加持下,智能表格的强大能力得到完美释放,开发者能以一种更为高效和准确的方式执行任务。无论是网页爬取、数据分析,还是自动化流程,我都可以借助脚本令牌来完成。
通过它,我们可以存储一些私密信息,如考试成绩、家庭信息等。也可以通过它实现电商数据同步,异或像up一样,将其作为小型数据库来使用等等。