Редактор скриптов Google getRange - PullRequest
0 голосов
/ 10 января 2020

Спасибо всем, кто может помочь.

Я пытаюсь отсканировать в столбце B моей таблицы слово «доставка по умолчанию» и отправить себе электронное письмо с адресом электронной почты этого человека, который находится в столбце. F, который находится под 'range.getRow (), 6' и работает нормально. Я знаю, что это работает, поскольку я успешно отправил себе электронное письмо, когда я использую «getActiveCell» вместо «sheet.getRange (2,2,700,2)» и выбираю ячейку, содержащую «доставку по умолчанию»

I ' Я пробовал все разные методы, но я застрял, и я не уверен, что мне нужно создать l oop, но если бы я мог избежать этого, это будет наиболее полезным.

Вот код, который Я скопировал, но внес некоторые изменения в соответствии со своими потребностями.

function sendemail() {

  var sheetNameToWatch = "Sheet1";
  var columnNumberToWatch = 2; 
  var valueToWatch = "Default shipping";

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange(2,2,700,2); // this is my problem

  var email = sheet.getRange(range.getRow(), 6).getValue();

  if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {
    var emailAddress = "my@email.com";
    var subject = "Default Shipping Alert";
    var email = "Please check the order and contact customer if necesary by clicking this link! www.website.com/search:"+email+"";

    MailApp.sendEmail(emailAddress, subject, email);
  }
}

Ответы [ 2 ]

1 голос
/ 10 января 2020

Лучшее решение - использовать for-l oop. Я немного почистил код и внес несколько изменений. Последовательность сценария описана ниже:

  1. Просматриваемый лист («Лист1») получается с использованием getSheetByName().
  2. Из В полученном листе получаются два диапазона: columnB, который содержит статус доставки, и emails для адресов электронной почты. Оба они равны по размеру (700 строк) и порядку.
  3. Для каждой записи в columnB проверяется статус доставки. В случае совпадения с valueToWatch, электронное письмо генерируется и отправляется на соответствующий ему адрес в массиве emails.

Кроме того, encodeURIComponent используется при генерации тело письма. Это делается для того, чтобы окончательный URL был действительным и соответствовал стандартам.

function sendemail() {

  var sheetNameToWatch = "Sheet1";
  var columnNumberToWatch = 2; 
  var valueToWatch = "Default shipping";

  var sheet = SpreadsheetApp.getActive().getSheetByName(sheetNameToWatch);
  var columnB = sheet.getRange(2, columnNumberToWatch, 700, 1).getValues();
  var emails = sheet.getRange(2, 6, 700, 1).getValues();

  for (var i=0; i<columnB.length; i++) {
    if (columnB[i] == valueToWatch) {
      var emailAddress = emails[i];
      var subject = "Default Shipping Alert";
      var emailBody = "Please check the order and contact customer if necesary by clicking this link! www.website.com/search:"+encodeURIComponent(emailAddress);

      MailApp.sendEmail(emailAddress, subject, emailBody);
    }
  }
}
0 голосов
/ 10 января 2020
function sendemail() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  var rg=sh.getDataRange(); 
  var vA=rg.getValues();
  vA.forEach(function(r,i){
    if (r[1]="Default shipping") {
      var emailAddress = "my@email.com";
      var subject = "Default Shipping Alert";
      var msg = "Please check the order and contact customer if necesary by clicking this link! www.website.com/search:"+r[5];
      MailApp.sendEmail(emailAddress, subject, msg);
    }
  });
}
...