利用金山文档AirScript脚本做数据库

之前看网友用金山文档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.";
}

图片[1]|利用金山文档AirScript脚本做数据库 - 5v|5v

图片[2]|利用金山文档AirScript脚本做数据库 - 5v|5v

获取脚本令牌-复制脚本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
喜欢就支持一下吧
点赞15 分享