Получение значений из последней отредактированной строки в Google Script - PullRequest
0 голосов
/ 30 сентября 2019

Подробности:

Я создал форму Google, которая после заполнения заполняет данные формы в новой строке в соответствующем листе Google, к которому прикреплена форма.

Я настроил Триггер так, чтобы на OnFormSubmit генерировалось электронное письмо с содержимым формы. Это работает как задумано.

Затем получатель этого электронного письма направляется в Google Sheet и просит написать некоторые вещи в столбцах справа от формы данных / строки, на которую ссылается электронное письмо. В конце они пишут «Да» в этой строке, если данные этой строки готовы двигаться дальше в процессе.

Я также настроил Trigger OnEdit, так что если этот предыдущий пользователь написал «Да 'в их строке, как объяснено выше, генерируется другое электронное письмо.

Моя проблема:

Если несколько форм отправляются подряд, например, формаданные заполняют строки 2, 3 и 4 в Google Sheet, и кто-то вводит «Да» в строке 2, триггер OnEdit генерирует электронное письмо, но включает данные из последней строки, строки 4.

Вопрос:

Как это сделать, если в строке 2 введено «Да», то данные из строки 2 отправляются по электронной почте, даже если в форме уже есть новые данные формыСтроки 3, 4, 5 и т. Д.

Некоторые примеры кода из моего скрипта:

  var ss = SpreadsheetApp.getActiveSheet();
  var Avals = ss.getRange("A1:A").getValues(); // identifies latest row submitted to let...                               
  var Alast = Avals.filter(String).length;     // ...email recipient know which row to look at

  var values = SpreadsheetApp.getActiveSheet(); 
  var row = values.getLastRow();

  var date = Utilities.formatDate(new Date(), "GMT+1", "MM/dd/yyyy"); 
  var endDate = date; 

  var Title = values.getRange(row, 2).getValue(); // examples of how I'm pulling the data
  var Supervisor = values.getRange(row, 3).getValue();
  var Approval1 = values.getRange(row, 17).getValue();
  var Approval2 = values.getRange(row, 18).getValue();

  // to save space I'm not posting the emailbody here - which works as intended using htmlbody 
  // further down in the code, as part of the OnEdit trigger, this is the if statement

  if(Approval1 == "Yes" && Approval2 == "")
  {
  MailApp.sendEmail({
  to: emailRecipients,
  replyTo: replyToSubmitter,
  subject: emailSubject1,
  htmlBody: emailBodyFirstApproved})
  ;
  }

   else if(Approval1 == "Yes" && Approval2 == "Yes")
  {
  MailApp.sendEmail({
  to: emailRecipients,
  replyTo: replyToSubmitter,
  subject: emailSubject2,
  htmlBody: emailBodyBothApproved})
  ;  

Спасибо огромное за чтение и миллион за помощь!

1 Ответ

0 голосов
/ 03 октября 2019

Мне удалось получить значение строки последней отредактированной строки , заменив это:

var var_name = values.getRange(row, 18).getValue();

этим:

var var_name = sheet.getRange(index, 2).getValue();

Я нашел следующий код, который позволил работать выше:

var sheet = event.source.getSheetByName('sheet name'); var actRng = event.source.getActiveRange(); var index = actRng.getRowIndex();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...