Google Script - Невозможно прочитать свойство «диапазон» из неопределенного (строка 30, файл «Код») - PullRequest
0 голосов
/ 10 марта 2020

Итак, я пытаюсь использовать сценарий для определения изменений в Row 60 и, если он идентифицирует определенные изменения, он автоматически отправит электронное письмо клиенту, чтобы сообщить ему / ей о статусе своего заказа.

Однако в строке 30 кода выдается ошибка, которую я не могу понять, будет признательна любая помощь:

function onEdit(e) {
  // Your sheet params
  var sheetName = "Form responses 1";
  var dateModifiedColumnIndex = 64;
  var dateModifiedColumnLetter = 'BL';

  var range = e.range; // range just edited
  var sheet = range.getSheet();
  if (sheet.getName() !== sheetName) {
    return;
  }

  // If the column isn't our modified date column
  if (range.getColumn() != dateModifiedColumnIndex) { 
    var row = range.getRow();
    var time = new Date();
    time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy, hh:mm:ss");
    var dateModifiedRange = sheet.getRange(dateModifiedColumnLetter + row.toString());
    dateModifiedRange.setValue(time);
  };
 }

function triggerOnEdit(e) 
{
  sendEmail(e);
}

function checkStatus(e)
{
  var range = e.range; //This is the line that throws up the error. //
  if (range.getColumn() <=60 && range.getColumn() >=60)
  {
    var edited_row = range.getRow();
    var status = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form responses 1").getRange(edited_row,60).getValue();
    if (status == "PENDING" || status == "APPROVED" || status == "REJECTED")
    {
      return edited_row;
    }
  }
  return 0;
}

function sendEmail(e)
{
  var approved_row = checkStatus(e);
  if (approved_row <=0)
  {
    return;
  }
  sendEmailByRow(approved_row);
}

function sendEmailByRow(row)
{
  var values = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form responses 1").getRange(row, 1, row, 63).getValues();
  var row_values = values[0];
  var candidate_email = composeCandidateEmail(row_values);
  MailApp.sendEmail(candidate_email.email,candidate_email.subject,candidate_email.message);
}

function composeCandidateEmail(row_values)
{
  var name = row_values [4];
  var email = row_values [5];
  var comment = row_values [63];
  var status = row_values [60];
  var link = row_values [61];
  var subject = "Your Purchase Order is " +status;
  var message = "Hello " +name+ ",\n \n Your Purchase Order is " +status+ 
                ". \n \n The following comments were made: /n" +comment+ "\n \n You can find your original Purchase Order here: /n /n" +link;
                return({message:message, subject:subject, email:email});
}

Изображение электронной таблицы, обратите внимание на заголовки столбцов, так как некоторые столбцы скрыты :

Изображение электронной таблицы

Спасибо за любую помощь в этом B

1 Ответ

0 голосов
/ 11 марта 2020

Попробуйте это:

Вам необходимо создать и установить триггер для него. Конечно, вы не можете проверить это, запустив его из редактора кода, как и любую другую функцию, потому что большинство других функций не требуют объектов событий. Если вы sh предоставите изображение электронной таблицы и CSV-данные (которые могут быть размещены в разделе кода вашего вопроса), то я хотел бы попытаться запустить его для вас. Примечание. У меня нет sh ссылки на электронную таблицу, потому что я больше не перехожу на ссылки на электронные таблицы. Если вы должны знать почему, тогда прочитайте мой профиль.

function onMyEdit(e) {
  var sh=e.range.getSheet();
  if (sh.getName() != 'Form responses 1')return;
  if (e.range.columnStart != 64) { 
    var time=Utilities.formatDate(new Date(), "GMT-08:00", "MM/dd/yy, HH:mm:ss");
    sh.getRange(e.range.rowStart,64).setValue(time);
  }
  if(e.range.columnStart == 60) {
    if(e.value=="PENDING" || e.value=="APPROVED" || e.value=="REJECTED") {
      var vs=getSheetByName("Form responses 1").getRange(e.range.rowStart,1,1,63).getValues()[0];
      var subject=Utilities.formatString('Your Purchase Order is %s', vs[60]);
      var message=Utilities.formatString('Hello %s,\n\n Your Purchase Order is %s. \n\n The following comments were made:\n%s\n\n You can find your original Purcase Order her: \n\n %s',vs[4],vs[5],vs[63],vs[61]);
      MailApp.sendEmail(vs[5],subject,message);
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...