AppScript如何提取Google Sheet最新提交行数据发送Slack通知?
Google Sheet 表单提交自动推送Slack代码修正方案
现有代码核心问题
- 大小写错误:
getvalue应为getValue、application/Json应为application/json,Google Apps Script对大小写敏感,错误写法会直接导致功能失效 - 逻辑缺陷:仅遍历前20行且未做非空判断,无法定位最新的表单提交行
- 未适配预填充公式场景:无法区分公式返回的空值和用户真实提交的有效数据
修正后完整代码
function buildReport() { const ss = SpreadsheetApp.getActive(); const sheet = ss.getSheetByName('Sheet1'); // 获取表格当前最大行数,减少无效遍历 const maxRow = sheet.getLastRow(); let latestOrder = ''; let targetRow = 0; // 从最后一行往上查找第一个AG列(第33列)非空的行,即为最新提交行 for (let i = maxRow; i >= 9; i--) { const cellValue = sheet.getRange(i, 33).getValue(); // 跳过公式返回的空值,仅匹配用户真实提交的有效数据 if (cellValue !== '') { latestOrder = cellValue; targetRow = i; break; } } // 如需提取同一行其他列数据,可取消注释下方代码并修改列号,例:AH列为第34列 // const otherColumnValue = sheet.getRange(targetRow, 34).getValue(); const payload = buildAlert(latestOrder); sendAlert(payload); } function buildAlert(newOrder) { const payload = { "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": ":bell: *New Order Alert* :bell:" } }, { "type": "divider" }, { "type": "section", "text": { "type": "mrkdwn", "text": newOrder } } ] }; return payload; } function sendAlert(payload) { const webHook = "https://hooks.slack.com/services/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"; const options = { "method": "post", "contentType" : "application/json", "muteHttpExceptions" : true, "payload" : JSON.stringify(payload) }; try { UrlFetchApp.fetch(webHook, options); } catch(e) { Logger.log(e); } }
部署配置说明
- 触发器配置:打开对应Google Sheet,点击顶部菜单「扩展程序」-「Apps Script」进入脚本编辑器,点击左侧菜单栏「触发器」,添加新触发器:选择
buildReport函数,事件来源选择「电子表格」,事件类型选择「表单提交时」,保存后即可实现用户提交表单后自动推送通知到Slack - 字段调整:如果需要推送多个字段内容,可在获取
targetRow后提取同一行其他列的数据,自行拼接Slack消息的text字段即可 - 范围调整:如果你的有效数据起始行不是第9行,修改遍历逻辑里的
i >= 9的数值即可
内容的提问来源于stack exchange,提问作者Sana Arif
相关产品推荐
相关产品推荐

