Как получить значение определенного столбца в последней строке с данными - PullRequest
1 голос
/ 14 мая 2019

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

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

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

TypeError: Не удалось найти функцию 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 ]

0 голосов
/ 14 мая 2019

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

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
0 голосов

Позволяет исправить вторую часть вашей функции:

// 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(), когда диапазон содержит одну ячейку.

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