之前看网友用金山文档AirScript做移动云盘签到还觉得挺有意思,于是研究了一下他的开发文档,写了一个表格的增改查脚手架API,
具体用途:
比如客户之前用我们软件需要上传账号数据表格,账号多了又不方便管理,或者账号给别人操作不方便展示,那就可以把账号数据放到云表格,然后用api进行操作
操作步骤:
登入金山文档:https://www.kdocs.cn/latest
新建智能表格(新建表格也行,表名不一样而已)-效率-高级开发-AirScript脚本编辑器-新建文档共享脚本-粘贴下面代码
// 获取传入的参数
const sheetName = Context.argv.sheet_name; // 目标工作表名称
const targetRow = Context.argv.row; // 目标行号
const targetCol = Context.argv.col; // 目标列号
const data = Context.argv.data; // 要写入的数据
const type = Context.argv.type; // 类型
// 获取目标工作表
const sheet = Application.Sheets(sheetName);
if (type == "update") {
// 获取现有行数
const lastRow = sheet.UsedRange.Rows.Count;
if (targetRow > lastRow) {
// 如果目标行号大于现有行数,则在最后一行后面插入新行
for (let i = lastRow + 1; i < targetRow; i++) {
sheet.Rows.Insert(lastRow + 1);
}
sheet.Cells(lastRow + 1, targetCol).Value2 = data;
}else{
// 写入数据
sheet.Cells(targetRow, targetCol).Value2 = data;
}
// 返回最后一行的行号
const updatedLastRow = sheet.UsedRange.Rows.Count;
return updatedLastRow;
} else if (type == "get_for_coord") {
// 获取指定行列的数据
const cellValue = sheet.Cells(targetRow, targetCol).Value2;
// 直接返回单元格的值
return cellValue;
} else if (type == "get_for_row") {
// 获取指定行的数据
const rowData = [];
const usedRange = sheet.UsedRange; // 获取工作表的使用范围
const lastCol = usedRange.Columns.Count; // 获取最后一列的列号
for (let col = 1; col <= lastCol; col++) {
const cellValue = sheet.Cells(targetRow, col).Value2; // 获取单元格的值
rowData.push(cellValue); // 将单元格的值添加到数组中
}
// 返回指定行的数据
return rowData;
} else if (type == "get_lastRow") {
// 返回最后一行的行号
const lastRow = sheet.UsedRange.Rows.Count;
return lastRow;
} else {
return "Invalid type parameter. Please specify a valid type.";
}
获取脚本令牌-复制脚本webhook链接
以下是python操作api代码
import requests
import json
def update(url,airscript_token,target_row,target_col,data_to_write):
headers = {
"Content-Type": "application/json",
"AirScript-Token": airscript_token
}
payload = {
"Context": {
"argv": {
"sheet_name": "工作表1", # 目标工作表名称
"row": target_row, # 目标行号
"col": target_col, # 目标列号
"data": data_to_write, # 要写入的数据
"type": "update" # 操作类型,update表示更新单元格数据
}
}
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
#print(response.text)
response_data=response.json()
lastRow = response_data["data"]["result"] # 获取返回的值
print("最后一行:",lastRow)
def get_for_coord(url,airscript_token,target_row,target_col):
headers = {
"Content-Type": "application/json",
"AirScript-Token": airscript_token
}
payload = {
"Context": {
"argv": {
"sheet_name": "工作表1", # 目标工作表名称
"row": target_row, # 目标行号
"col": target_col, # 目标列号
"type": "get_for_coord" # 操作类型,update表示更新单元格数据
}
}
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
response_data=response.json()
cellValue = response_data["data"]["result"] # 获取返回的值
print("返回数据:",cellValue)
def get_for_row(url,airscript_token,target_row):
headers = {
"Content-Type": "application/json",
"AirScript-Token": airscript_token
}
payload = {
"Context": {
"argv": {
"sheet_name": "工作表1", # 目标工作表名称
"row": target_row, # 目标行号
"type": "get_for_row" # 操作类型,update表示更新单元格数据
}
}
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
response_data=response.json()
rowData = response_data["data"]["result"] # 获取返回的值
print("返回数据:",rowData)
def get_lastRow(url,airscript_token):
headers = {
"Content-Type": "application/json",
"AirScript-Token": airscript_token
}
payload = {
"Context": {
"argv": {
"sheet_name": "工作表1", # 目标工作表名称
"type": "get_lastRow" # 操作类型,update表示更新单元格数据
}
}
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
response_data=response.json()
lastRow = response_data["data"]["result"] # 获取返回的值
print("最后一行:",lastRow)
if __name__ == "__main__":
#webhook地址
url = "https://www.kdocs.cn/api/v3/ide/file/cueSdcGVOadm/script/V2-4YRlL3woYePkydVH75IctV/sync_task"
# 令牌
airscript_token = "xxxx"
update(url,airscript_token,99,2,"hello")
get_lastRow(url,airscript_token)
get_for_row(url,airscript_token,1)
get_for_coord(url,airscript_token,1,1)
由于需求不一样,我只写了增改查功能:
- 指定坐标增改(超行默认补到最后一行)
- 查指定坐标数据
- 查指定行数据
其实还可以实现很多功能:
- 整行增加、区域增加(三维数组)
- 去重、筛选查询…….
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END