首页 > 解决方案 > 如果编辑的列值与特定文本(如发送或是)匹配,则从 Google 电子表格发送 Slack 消息 onEdit 触发器

问题描述

我有以下应用程序脚本,用于通过 Google 电子表格在编辑触发器上发送 Slack 消息。我对编码完全陌生,但有一点理解,所以,我研究并想出了这段代码。该脚本正在运行,我正在接收松弛消息,但故障是我无法将行值存储在数组中并将它们传递到 Slack 有效负载中。

我的要求是,如果我编辑特定列,假设我从下拉列表中选择或键入“发送”或“是”,我想将该编辑行的所有或部分列值传递到我的 Slack 消息中。

我知道下面的代码中缺少一些东西,根据我的理解,我不需要 i++ 的东西。但是,我无法修复它。此外,如果我们可以在消息发送到 Slack 后添加一些内容,将编辑的单元格值重置为“否”或“刷新”。如果你能帮助我处理这段代码,这是我对你们的谦卑要求。

只是为了让自己更清楚 - 我想知道如何将编辑单元格 onedit 的行数据发送到松弛。即我们如何在同一行的特定单元格编辑上发布行数据。我希望这可以澄清。

function sendApplicationDetails() {
  // select the range from the Summary sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Database");
  var lastRow = sheet.getLastRow();
  var range = sheet.getRange(2,1,lastRow-1,61).getValues();

  
  // loop over range and send communication if "Yes" option chosen
  for (var i = 0; i < range.length; i++) {
    if (range[i][59] == "Yes") {
      
          // post message to slack
          sendToSlack(range[i]);
          break;

      }

    };
}
  

// function to send message to Slack
function sendToSlack(range) {

  var timestamp = new Date();

  var url = "Slack Webhook";
  
  var payload = {

    "text": "Hi " + range[31] +
      "\n Here are the details. Let us know if you have any questions! \n" +
      "\n Student Name: " + range[15] +
      "\n Nationality: " + range[16] +
      "\n Chosen Country: " + range[21] +
      "\n Preferred Course: " + range[22] +
      "\n Date: " + timestamp 
    };

  var options = {
    "method": "post",
    "contentType": "application/json",
    "payload": JSON.stringify(payload)
  };
  
  return UrlFetchApp.fetch(url,options);
}

标签: javascriptgoogle-apps-scriptgoogle-sheetsspreadsheetslack-api

解决方案


试试这个并删除您手动创建的触发器。

function onEdit (e) {
  var sheetToWatch = 'Database';
  var colToWatch = 60;

  if (e.range.getSheet().getName() == sheetToWatch 
      && e.range.getColumn() == colToWatch) {
    sendApplicationDetails()
  }


}
function sendApplicationDetails() {
  // select the range from the Summary sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Database");
  var lastRow = sheet.getLastRow();
  var range = sheet.getRange(2,1,lastRow-1,61);
  var values = range.getValues();

  
  // loop over range and send communication if "Yes" option chosen
  for (var i = 0; i < values.length; i++) {
    if (values[i][59] == "Yes") {
      
      // post message to slack
      sendToSlack(values[i]);
      sheet.getRange(i+2,60).setValue('No')
    }
  }
}
  

// function to send message to Slack
function sendToSlack(range) {

  var timestamp = new Date();

  var url = "Slack Webhook";
  
  var payload = {

    "text": "Hi " + range[31] +
      "\n Here are the details. Let us know if you have any questions! \n" +
      "\n Student Name: " + range[15] +
      "\n Nationality: " + range[16] +
      "\n Chosen Country: " + range[21] +
      "\n Preferred Course: " + range[22] +
      "\n Date: " + timestamp 
    };

  var options = {
    "method": "post",
    "contentType": "application/json",
    "payload": JSON.stringify(payload)
  };
  
  return UrlFetchApp.fetch(url,options);
}


推荐阅读