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

Google Sheets脚本问题:匹配今日日期并发送值班信息至Slack

Google Sheets 自动发送当日值班信息到Slack的问题

我的Google Sheets表格结构如下:

DataOn DutySupport
15/02/2023Name1Name4
16/02/2023Name2Name5
17/02/2023Name3Name6

需求:检查Data列中是否存在与今日日期匹配的行,获取对应On Duty和Support列的值并发送到Slack频道。

我尝试了以下代码但无法运行:

function sendSlackMessage() {
  const onduty = QUERY("SELECT B WHERE todate(A)=date'" & text(today(), "dd/MM/yyyy") &"'");
  const support = QUERY("SELECT C WHERE todate(A)=date'" & text(today(), "dd/MM/yyyy") &"'");
  const url = "https://hooks.slack.com/services/xxxxxx/xxxxxxx/xxxxxxxxxxxxxxxxxxxxxx";
  const params = {
     method: "post",
     contentType: "application/json",
     payload: JSON.stringfy({
       "text" : "Analyst on duty today: " + onduty + "\n" + "Support analyst: " + support
     })
  }
  const sendMsg = UrlFetchApp.fetch(url, params);
  var respCode = sendMsg.getResponseCode();
  Logger.log(sendMsg);
  Logger.log(respCode);
}

问题分析与修正代码

原代码存在几个关键错误:

  1. 直接在Apps Script中使用QUERY、today()、text()等工作表函数,这些函数仅能在表格单元格中使用,不能直接在脚本中调用
  2. JSON.stringfy拼写错误,正确写法是JSON.stringify
  3. 未获取工作表对象,无法读取表格数据

修正后的代码如下:

function sendSlackMessage() {
  // 获取当前活动工作表
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // 获取表格中所有数据(包含表头)
  const allData = sheet.getDataRange().getValues();
  // 将今日日期格式化为与表格一致的dd/MM/yyyy字符串
  const todayStr = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd/MM/yyyy");

  let onDutyName = "未找到今日值班人员";
  let supportName = "未找到今日支持人员";

  // 遍历数据行(跳过第一行表头)
  for (let i = 1; i < allData.length; i++) {
    const rowDate = Utilities.formatDate(new Date(allData[i][0]), Session.getScriptTimeZone(), "dd/MM/yyyy");
    if (rowDate === todayStr) {
      onDutyName = allData[i][1]; // 取On Duty列的值(第二列,索引1)
      supportName = allData[i][2]; // 取Support列的值(第三列,索引2)
      break; // 找到匹配行后终止循环
    }
  }

  const slackWebhookUrl = "https://hooks.slack.com/services/xxxxxx/xxxxxxx/xxxxxxxxxxxxxxxxxxxxxx";
  const requestParams = {
    method: "POST",
    contentType: "application/json",
    payload: JSON.stringify({
      text: `今日值班分析师: ${onDutyName}\n支持分析师: ${supportName}`
    })
  };

  try {
    const response = UrlFetchApp.fetch(slackWebhookUrl, requestParams);
    Logger.log("发送成功,响应内容: " + response.getContentText());
    Logger.log("响应码: " + response.getResponseCode());
  } catch (error) {
    Logger.log("发送失败,错误信息: " + error.toString());
  }
}

修正说明

  • 通过SpreadsheetApp API获取工作表和数据,替代无效的工作表函数调用
  • 使用Utilities.formatDate统一日期格式,确保匹配逻辑准确
  • 修正JSON.stringify拼写错误
  • 添加循环遍历查找匹配日期,获取对应列的值
  • 增加异常处理,捕获发送请求时的错误并记录日志

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:40:49