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

Я довольно новичок в JS и пытаюсь создать скрипт, который запускает электронную почту каждый раз, когда форма заполняется. Письмо должно иметь очень конкретный заголовок и текст, который создается на моем листе.

В частности, мне нужно, чтобы моя строка темы была столбцом I в последней строке с данными, а мое тело сообщения электронной почты было столбцом F. Мне удалось заставить скрипт выбрать правильную последнюю строку, но я изо всех сил пытаюсь понять, как получить правильное значение столбца.

В настоящее время у меня есть один кусок кода, который я пробовал, но я получаю сообщение об ошибке

Ошибка типа: не удается найти функцию getValue в объекте 346. (строка 7, файл "Код") Уволить

function sendEmail() {
  // Fetch the email address - This is a specific email address in the sheet I need stuff to go to 
  var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Reference").getRange("F2");
  var emailAddress = emailRange.getValues();

  // Send Alert Email.
  var message = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1").getRange("A1").getDataRegion().getLastRow().getValue() // KMS Survey Text
  var subject = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1").getRange("A1").getDataRegion().getLastRow().getValue(); // KMS Survey Title
  MailApp.sendEmail(emailAddress, subject, message);

}

Всего 2 ответа


Давайте исправим вторую часть вашей функции:

// Send Alert Email.
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1");
var lastRow = sheet.getRange("A1").getDataRegion().getLastRow();
var message = sheet.getRange(lastRow, 7).getValue(); // (F column is 7-th) KMS Survey Text
var subject = sheet.getRange(lastRow, 9).getValue(); // (I column is 9-th) KMS Survey Title
MailApp.sendEmail(emailAddress, subject, message);

Ошибка произошла из-за неправильного использования метода getLastRow () . На самом деле он возвращает число, а не объект. Имея число, мы можем сослаться на нужные ячейки последней строки и получить их значения.

Кроме того, я рекомендую использовать getValue() вместо getValues() когда диапазон содержит одну ячейку.


Это сделает именно то, что вы ищете. Я очистил некоторые из ваших переменных, потому что получение активной электронной таблицы, затем таблицы, диапазона и т. Д. Не является хорошей практикой. Вы можете определить это один раз, а затем использовать определенную переменную для захвата различных диапазонов, как вам угодно.

function sendEmail() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var refSheet = spreadsheet.getSheetByName('Reference');
  var formSheet = spreadsheet.getSheetByName('Form Responses 1');

  var lastRow = formSheet.getDataRange().getLastRow();
  var subject = formSheet.getRange(lastRow, 6).getValue(); //KMS Survey Text
  var message = formSheet.getRange(lastRow, 9).getValue(); //KMS Survey Title
  var emailAddress = refSheet.getRange("F2").getValue();

  // Send Alert Email.
  MailApp.sendEmail(emailAddress, subject, message);
}

Вместо getRange().getDataRegion().getLastRow() вы можете использовать getDataRange() на листе, чтобы получить весь диапазон данных, которые вы в данный момент получили на листе, а затем использовать getLastRow() вместо этого, например:

var lastRow = formSheet.getDataRange().getLastRow();

Затем используйте это, чтобы получить диапазон ваших данных для электронной почты, обратите внимание: строки / столбцы getRange() индексируются с 1, поэтому столбец F = 6, столбец I = 9:

var subject = formSheet.getRange(lastRow, 6).getValue(); //KMS Survey Text
var message = formSheet.getRange(lastRow, 9).getValue(); //KMS Survey Title

Есть идеи?

10000