基于在单元格数据中查找匹配的字符串来触发函数列表

时间:2017-09-20 08:30:22

标签: google-apps-script google-sheets

以下是我放在一起的功能,我想根据Google工作表中的单元格内容触发4种不同的电子邮件功能。但它似乎不起作用。只是想知道是否有人可以帮助我并告诉我哪里出错了?

function emailAlerts() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var activerow = sheet.getActiveRange().getRow();
  var startRow = activerow;  // First row of data to process
  var numRows = 1;   // Number of rows to process
    // Fetch the range of cells
  var dataRange = sheet.getRange(startRow, 1, numRows, 44)
    // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];    
  var checkdata = sheet.getRange(startRow + i, 43).getValue(); // Email Alerts column
  if (checkdata.indexOf("Engineering") > -1) {
  sendEngineeringEmails();
  } 
  if (checkdata.indexOf("Cleaners") > -1) {
  sendCleanersEmails();
  }
  if (checkdata.indexOf("Advertising") > -1) {
  sendAdvertisingEmails();
  }
  if (checkdata.indexOf("Management") > -1) {
  sendManagementEmails();
  } 
 }
}

包含数据的单元格可能在一行中格式化为

Engineering, Cleaners, Advertising, Management 

并在另一行中像这样

Cleaners, Advertising

或者在另一行上喜欢这个

Engineering, Management

我需要搜索数据以找到所需字符串的匹配项,以便能够触发相关的电子邮件功能。电子邮件功能都可以自行完成,但我遇到了使用这个新功能自动化问题的问题,以便发送正确的电子邮件。我需要它能够发送到一个电子邮件功能或在某些情况下所有4个电子邮件功能基于提交到每行上包含单元格的数据的内容(此数据来自Google表单并基于表单的清单类型表单用户可以从列表中选择选项的问题

非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:0)

假设您有以下表格中的数据

Google Spreadsheet Data Format

然后你的代码应该是这样的。检查评论代码

function emailAlerts()
{
  //INSTEAD OF THIS TRY THE CODE BELOW USING "openById" & "getSheetByName" METHODS.
  //  var sheet = SpreadsheetApp.getActiveSheet();
  //  var activerow = sheet.getActiveRange().getRow();

  //IS THERE A PARTICULAR REASON FOR USING TWO DIFFERENT VARIABLES WITH SAME VALUES
  //  var startRow = activerow;  // First row of data to process
  //  var numRows = 1;   // Number of rows to process

  //COULD BE DONE IN ONE LINE
  //  var dataRange = sheet.getRange(startRow, 1, numRows, 44)
  //  var data = dataRange.getValues();

  var sheet = SpreadsheetApp.openById("1BZuYFCnN_g9vn5crxbPeYlhUKwH6N3u0uT8LCmm-neM").getSheetByName("Sheet1");
  var numRows = sheet.getLastRow();   // Number of rows to process
  var data = sheet.getRange(1, 1, numRows, 1).getValues();

  for (var i = 0; i < data.length; ++i)
  {
    var row = data[i].toString();

    //NEVER CALL APIS IN FOR LOOP, IT CAN HAVE DRASTIC EFFECT ON PERFORMANCE
    //var checkdata = sheet.getRange(startRow + i, 43).getValue();
    Logger.log("Index: "+i)

    if (row.indexOf("Engineering") > -1)
    {
      Logger.log("sendEngineeringEmails()");
    } 
    if (row.indexOf("Cleaners") > -1)
    {
      Logger.log("sendCleanersEmails()");
    }
    if (row.indexOf("Advertising") > -1)
    {
      Logger.log("sendAdvertisingEmails()");
    }
    if (row.indexOf("Management") > -1)
    {
      Logger.log("sendManagementEmails()");
    } 
  }
}