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

如何为Google Sheet公式更新设置通知并推送至Discord等平台?

解决Google Sheet公式自动更新的通知问题

一、实现不受编辑类型限制的更新通知

Google Sheets自带通知、Zapier/IFTTT这类工具大多只响应手动编辑,要监控公式自动更新的数值变化,最可靠的方案是用Google Apps Script自定义监控逻辑,具体步骤如下:

  1. 打开目标Google Sheet,点击「扩展程序」→「Apps Script」进入脚本编辑器
  2. 替换默认代码为以下脚本,它会存储单元格旧值,对比每次变化(包括公式更新)并触发通知:
// 存储旧值的属性键
const OLD_VALUE_KEY = "sheetOldValues";

// 初始化:存储当前值并创建触发器
function setup() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const range = sheet.getDataRange(); // 可改为指定范围如getRange("A1:Z100")缩小监控范围
  const values = range.getValues();
  PropertiesService.getScriptProperties().setProperty(OLD_VALUE_KEY, JSON.stringify(values));
  
  // 创建onChange触发器,捕捉表格的各类变化(包括公式更新)
  ScriptApp.newTrigger("checkForChanges")
    .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
    .onChange()
    .create();
}

// 检查单元格值变化并发送通知
function checkForChanges() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const range = sheet.getDataRange();
  const currentValues = range.getValues();
  const oldValues = JSON.parse(PropertiesService.getScriptProperties().getProperty(OLD_VALUE_KEY) || "[]");
  
  // 对比新旧值,收集变化记录
  let changes = [];
  for (let i = 0; i < currentValues.length; i++) {
    for (let j = 0; j < currentValues[i].length; j++) {
      if (currentValues[i][j] !== oldValues[i]?.[j]) {
        changes.push({
          row: i + 1,
          col: String.fromCharCode(64 + j + 1), // 转换为列字母(A、B...)
          oldValue: oldValues[i]?.[j] || "",
          newValue: currentValues[i][j]
        });
      }
    }
  }
  
  if (changes.length === 0) return;
  
  // 生成通知内容
  let message = "Google Sheet更新通知:\n";
  changes.forEach(change => {
    message += `单元格${change.col}${change.row}: 从「${change.oldValue}」变为「${change.newValue}」\n`;
  });
  
  // 发送到目标平台(根据需求启用对应函数)
  sendToDiscord(message);
  sendToTelegram(message);
  sendToWhatsApp(message);
  
  // 更新存储的旧值,用于下次对比
  PropertiesService.getScriptProperties().setProperty(OLD_VALUE_KEY, JSON.stringify(currentValues));
}
  1. 先运行setup函数,按提示完成权限授权(第一次运行需要允许脚本访问你的表格)
  2. 此后表格内任何单元格值变化(包括公式自动计算更新)都会触发检查和通知

二、推送到Discord、Telegram、WhatsApp的实现

1. 推送到Discord

  • 打开Discord服务器设置→「集成」→「Webhook」,新建Webhook并复制其URL
  • 在脚本中添加以下函数(替换成你的Webhook URL):
function sendToDiscord(message) {
  const webhookUrl = "你的Discord Webhook URL";
  const payload = { content: message };
  
  UrlFetchApp.fetch(webhookUrl, {
    method: "post",
    contentType: "application/json",
    payload: JSON.stringify(payload)
  });
}

2. 推送到Telegram

  • 给Telegram的@BotFather发送消息创建机器人,获取机器人的API Token
  • 给你的机器人发送一条测试消息,通过Telegram API的getUpdates接口获取你的Chat ID
  • 在脚本中添加以下函数(替换成你的Token和Chat ID):
function sendToTelegram(message) {
  const botToken = "你的Telegram机器人API Token";
  const chatId = "你的Chat ID";
  const url = `https://api.telegram.org/bot${botToken}/sendMessage?chat_id=${chatId}&text=${encodeURIComponent(message)}`;
  
  UrlFetchApp.fetch(url);
}

3. 推送到WhatsApp

  • 注册Twilio账号,获取账号SID、Auth Token,并绑定一个WhatsApp号码作为发送方
  • 在脚本中添加以下函数(替换成你的Twilio信息和接收方号码):
function sendToWhatsApp(message) {
  const accountSid = "你的Twilio账号SID";
  const authToken = "你的Twilio Auth Token";
  const fromNumber = "whatsapp:+你的Twilio绑定号码";
  const toNumber = "whatsapp:+接收者手机号码";
  
  const url = `https://api.twilio.com/2010-04-01/Accounts/${accountSid}/Messages.json`;
  const payload = {
    From: fromNumber,
    To: toNumber,
    Body: message
  };
  
  UrlFetchApp.fetch(url, {
    method: "post",
    headers: {
      Authorization: "Basic " + Utilities.base64Encode(accountSid + ":" + authToken)
    },
    payload: payload
  });
}

注意事项

  • 若表格数据量较大,建议将getDataRange()改为指定监控范围(如getRange("A1:Z100")),避免脚本执行超时
  • 各个平台的API需确保权限正确:Discord Webhook要允许发送消息,Telegram机器人需加入目标聊天,Twilio需完成WhatsApp号码验证
  • 如果onChange触发器无法覆盖部分实时公式更新场景,可添加时间驱动触发器(如每分钟检查一次)补充监控

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:40:26