从 Google 电子表格发送 Slack 消息 onEdit 触发器,如果​​编辑的列值匹配特定文本,如 Send 或 Yes

Sending Slack message onEdit trigger from Google Spreadsheet, if the edited columns value matches specific text like Send or Yes

我有下面的应用程序脚本,我用它通过编辑触发器上的 Google 电子表格发送 Slack 消息。我对编码完全陌生,但有一定的了解,因此,我研究并提出了这段代码。这个脚本正在运行,我收到了 slack 消息,但问题是我无法将行值存储在数组中并将它们传递到 Slack 负载中。

我的要求是,如果我编辑一个特定的列,假设我从下拉列表中选择或键入 'Send' 或 'Yes',我想传递该列的全部或部分值将行编辑到我的 Slack 消息中。

我知道我在下面的代码中遗漏了一些东西,根据我的理解,我不需要 i++ 东西。但是,我无法修复它。此外,如果我们可以在消息发送到 Slack 后放入将编辑的单元格值重置为 'No' 或 'Refresh' 的内容。如果你们能帮助我处理这段代码,我谨向你们提出请求。

只是为了让自己更清楚 - 我想知道如何将编辑单元格 onedit 的行数据发送到 slack。即我们如何 post 从同一行编辑特定单元格的行数据。我希望这能澄清。

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);
}

尝试使用此代码,我用条件语句替换循环 for 尊重答案为“是”的列,然后我将参数范围 [i] 更改为范围(二维数组),最后我将代码添加到将“是”的单元格更改为“否”

function sendApplicationDetails() {

  // select the range from the Summary sheet

  var ss = SpreadsheetApp.getActiveSpreadsheet();

  var sheet = ss.getSheetByName("Database");

  var column = sheet.getActiveRange().getColumn();
  
  if (column == 59){

    var row = sheet.getActiveRange().getRow();

    var cell = sheet.getRange(row, column);

    if (cell.getValue() == "Yes"){

      var range = sheet.getRange(row, 1, row, 61);

      // post message to slack

      sendToSlack(range.getValues());

      cell.setValue("No");

    }
  }    
}

// function to send message to Slack

function sendToSlack(range) {

  var timestamp = new Date();
    
  var url = "Slack Webhook";
  
  var payload = {

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

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

}

您可以在此条件中添加&& (cell == "Choose")接受选择

if (cell == "Yes"){

  var range = sheet.getRange(row, 1, row, 61);
  // post message to slack
  sendToSlack(range);
  cell.setValue("No");
    
}

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

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);
}