You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用App Script实现AppSheet表单联动更新Google Sheet库存单元格?

用Google Apps Script实现AppSheet库存借还的Staff表自动更新

完全可以通过Google Apps Script实现你需要的自动更新逻辑,以下是具体的实现方案:

核心逻辑说明

脚本会监听借还记录表的编辑事件,根据操作类型(借出/归还),对Staff表中对应staff_id的行进行tool列的填充或清空操作:

  • 借出:找到Staff表对应员工行的第一个空tool列,填入tool_id
  • 归还:找到Staff表对应员工行中匹配该tool_id的列,清空单元格

完整脚本代码

function handleLoanReturn(e) {
  // 配置参数:根据你的实际表结构修改
  const CONFIG = {
    loanReturnSheetName: "借还记录", // 存储借还操作的工作表名
    staffSheetName: "Staff", // 员工信息表名
    loanReturnCols: {
      staffId: 1, // 借还表中staff_id所在列(从1开始计数)
      toolId: 2, // 借还表中tool_id所在列
      action: 3 // 借还表中操作类型(借出/归还)所在列
    },
    staffToolCols: [3, 4, 5], // Staff表中tool1、tool2、tool3所在列
    headerRow: 1 // 表头所在行
  };

  // 跳过非目标工作表的编辑
  const activeSheet = e.source.getActiveSheet();
  if (activeSheet.getName() !== CONFIG.loanReturnSheetName) return;

  // 跳过表头行
  const editedRow = e.range.getRow();
  if (editedRow === CONFIG.headerRow) return;

  // 获取当前操作的关键数据
  const staffId = activeSheet.getRange(editedRow, CONFIG.loanReturnCols.staffId).getValue();
  const toolId = activeSheet.getRange(editedRow, CONFIG.loanReturnCols.toolId).getValue();
  const action = activeSheet.getRange(editedRow, CONFIG.loanReturnCols.action).getValue();

  // 定位到Staff表
  const staffSheet = e.source.getSheetByName(CONFIG.staffSheetName);
  if (!staffSheet) {
    console.error(`未找到名为${CONFIG.staffSheetName}的工作表`);
    return;
  }

  // 查找对应staff_id的员工行
  const staffData = staffSheet.getDataRange().getValues();
  let targetRow = -1;
  for (let i = 0; i < staffData.length; i++) {
    if (staffData[i][0] === staffId) { // 假设Staff表staff_id在第1列
      targetRow = i + 1; // 转换为工作表行号(从1开始)
      break;
    }
  }

  if (targetRow === -1) {
    console.error(`未找到staff_id为${staffId}的员工记录`);
    return;
  }

  // 执行借出操作
  if (action === "借出") {
    for (const col of CONFIG.staffToolCols) {
      const cellValue = staffSheet.getRange(targetRow, col).getValue();
      if (!cellValue) {
        staffSheet.getRange(targetRow, col).setValue(toolId);
        console.log(`已为员工${staffId}填充工具${toolId}至对应列`);
        break;
      }
    }
  }
  // 执行归还操作
  else if (action === "归还") {
    for (const col of CONFIG.staffToolCols) {
      const cellValue = staffSheet.getRange(targetRow, col).getValue();
      if (cellValue === toolId) {
        staffSheet.getRange(targetRow, col).clearContent();
        console.log(`已清空员工${staffId}名下的工具${toolId}`);
        break;
      }
    }
  }
}

触发器设置

为了确保脚本能稳定响应AppSheet的提交操作,建议创建安装式触发器:

  1. 打开Google Sheet的脚本编辑器(工具→脚本编辑器)
  2. 点击左侧「触发器」图标,选择「添加触发器」
  3. 配置参数:
    • 选择函数:handleLoanReturn
    • 部署类型:从电子表格
    • 事件类型:更改
    • 保存即可

注意事项

  • 务必根据你的实际表结构修改代码中的CONFIG配置项,包括工作表名、列索引等
  • 确认AppSheet的表单提交会同步到对应的Google Sheet,脚本才能捕获到操作事件
  • 由于你已经在AppSheet表单中限制了最多借3件工具,脚本无需额外处理超出限制的场景
  • 测试时可手动在借还记录表添加测试数据,验证Staff表的自动更新效果

内容的提问来源于stack exchange,提问作者Haypipi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 05:15:32