如何用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的提交操作,建议创建安装式触发器:
- 打开Google Sheet的脚本编辑器(工具→脚本编辑器)
- 点击左侧「触发器」图标,选择「添加触发器」
- 配置参数:
- 选择函数:
handleLoanReturn - 部署类型:从电子表格
- 事件类型:更改
- 保存即可
- 选择函数:
注意事项
- 务必根据你的实际表结构修改代码中的
CONFIG配置项,包括工作表名、列索引等 - 确认AppSheet的表单提交会同步到对应的Google Sheet,脚本才能捕获到操作事件
- 由于你已经在AppSheet表单中限制了最多借3件工具,脚本无需额外处理超出限制的场景
- 测试时可手动在借还记录表添加测试数据,验证Staff表的自动更新效果
内容的提问来源于stack exchange,提问作者Haypipi
相关产品推荐
相关产品推荐

