如何修改Google Sheets脚本实现触发时发送整行数据及对应工作表名到Telegram
修改后完整脚本
const token = "你的Telegram机器人Token"; const chatId = "你的目标群组ChatId"; const startRow = 2; // 触发推送的起始行 const targetColumn = 2; // 触发列,第2列输入触发词执行推送 const triggerWord = "Yanson"; // 触发词 function onEdit(e) { sendTelegram(e); } function sendTelegram(e) { // 基础参数校验,避免无编辑事件对象时报错 if (!e) return; const range = e.range; const row = range.getRow(); const col = range.getColumn(); const activeSheet = e.source.getActiveSheet(); const sheetName = activeSheet.getName(); // 校验是否符合触发条件:第2列、行号≥起始行、输入内容为触发词 if (col !== targetColumn || row < startRow || range.getValue() !== triggerWord) return; // 获取当前行所有有内容的单元格数据 const lastCol = activeSheet.getLastColumn(); const rowValues = activeSheet.getRange(row, 1, 1, lastCol).getValues()[0]; // 格式化行内容,按列拼接 let contentText = ""; rowValues.forEach((val, index) => { // 可根据自身表格的列字段自定义替换列名,比如列1改为「序号」、列3改为「提交日期」 contentText += `列${index+1}:${val ? val : "空"}\n`; }); // 拼接最终发送的消息 const sendContent = `🔔 新增文档提醒 工作表名称:${sheetName} 触发行号:${row} 行内容详情: ${contentText}`; // 调用Telegram接口发送消息 const url = `https://api.telegram.org/bot${token}/sendMessage?chat_id=${chatId}&text=${encodeURIComponent(sendContent)}`; UrlFetchApp.fetch(url); // 原注释的日期写入逻辑,需要使用直接取消注释即可 // const currentDate = new Date(); // activeSheet.getRange(row,4).setValue(currentDate); // if(activeSheet.getRange(row,3).getValue() == ""){ // activeSheet.getRange(row,3).setValue(currentDate); // } }
核心修改说明
- 移除了硬编码的工作表名限制,所有工作表只要满足触发条件都会执行推送,通过
activeSheet.getName()直接获取当前触发操作的工作表名称,自动带入消息内容。 - 不再固定读取第8列内容,改为通过
getRange(row, 1, 1, lastCol)获取当前触发行从第1列到最后一个有内容列的全部数据,逐列格式化后拼接进消息。 - 统一了Telegram消息发送逻辑,去掉了原代码中未定义的
sendText函数调用,直接通过UrlFetchApp调用接口发送消息,避免执行报错。 - 优化了触发条件判断逻辑,提前过滤不符合条件的编辑操作,减少不必要的代码执行。
注意事项:
- 简单onEdit触发器没有访问外部接口的权限,你需要在脚本编辑器的「触发器」页面手动添加可安装编辑触发器,选择
onEdit函数,触发事件类型为「编辑时」,授权相关权限后才能正常调用Telegram接口发送消息。- 代码里的列名可以根据你实际的表格字段自定义替换,消息可读性更高。
内容的提问来源于stack exchange,提问作者Brown
相关产品推荐
相关产品推荐

