Google Script: автоматизация электронной почты: ошибок нет, но код все еще не работает - PullRequest
0 голосов
/ 14 апреля 2020

Это моя первая попытка с Google Script, поэтому он очень прост c. Цель состоит в том, чтобы сделать скрипт go по всем строкам моей базы данных и отправить электронные письма, если указанная ячейка c не пуста (чтобы не отправлять электронную почту несколько раз). Затем сценарий должен записаться в ячейку, чтобы пометить его как отправленный.

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

Используемый мной документ Google Sheets содержит два листа: 1) «Лист 1», в котором содержится конкретная c информация о жалобе, и 2) «Лист 2», в котором указывается, кому его отправлять. .

Лист 1:

Sheet 1

Лист 2:

Sheet 2

Ниже мой сценарий, я знаю это очень основа c, но это уровень понимания, который у меня есть сейчас:

function automate_mail() {

  //defines a counter for lines

  var counter = 0;



  // repeats for all lines

  var data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1")
  for (i in data) {
    var row = data[i];



 // Checks if cell is empty, if yes then do sth

  var check_field_range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange(5,2 + counter); 
  var check_field = check_field.getValue();
    if (check_field!==""){



  // severity level

  var complaint_level_range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange(2,2 + counter); 
  var complaint_level = complaint_level_range.getValue();



  // message1

  var message1_range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2").getRange(3,2 + counter); 
  var message1 = message1_range.getValue();



  // message2

  var message2_range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2").getRange(4,2+counter); 
  var message2 = message2_range.getValue();



  // message3

  var message3_range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2").getRange(5,2+counter); 
  var message3 = message3_range.getValue();



  // message4

  var message4_range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2").getRange(6,2+counter); 
  var message4 = message4_range.getValue(); 



  // complaint_message

  var complaint_message_range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange(3,2 + counter); 
  var complaint_message = complaint_message_range.getValue(); 



  // location

  var location_range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange(4,2 + counter); 
  var location = location_range.getValue();



  //gets email address

   var email_address_range = spreadsheetApp.getActiveSpreadsheet().getSheetbyName("Sheet2").getRange(1,2 + counter);
   var email_address = email_address_range.value();



   //gets name

   var name_range = spreadsheetApp.getActiveSpreadsheet().getSheetbyName("Sheet2").getRange(2,2 + counter);
   var name = name_range.value();



   //gets date

   var date_range = spreadsheetApp.getActiveSpreadsheet().getSheetbyName("Sheet1").getRange(1,2 + counter);
   var date = date_range.value();



  // This parses the data for the email to send

  MailApp.sendEmail(email_address, "New complaint"+date , message1+complaint_level+message2+location+message3+complaint_message+message4);



 //fill in control box

 ActiveSheet("Sheet1");
 SpreadsheetApp.getActiveSheet().getRange(5,2 + counter).setValue("1");



 // increase counter by 1

 counter = counter + 1 



//else do nothing

 //else{}

}
}
}

1 Ответ

1 голос
/ 14 апреля 2020
var data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1")
  for (i in data) {
...

Вы определяете данные как лист, это невозможно, вам нужно получить

  1. диапазон интересов с помощью getRange () или getDataRange ()
  2. данные в этом диапазоне с помощью getValues ​​()
  3. Имейте в виду, что извлекаемые вами данные будут массивом двумерных значений, поэтому тем не менее, вы не можете выполнять итерацию с одним for loop по всем данным, но вам нужно выполнять итерацию по строкам или столбцам (или, если вам нужно выполнить итерацию по обоим - вам нужно два вложенных цикла)

Второй выпуск:

var check_field_range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange(5,2 + counter);

На вашем изображении поля под Check пусты. Таким образом, условие if (check_field!=="") (не пустое поле проверки) не выполняется, и, следовательно, остальная часть кода, включая отправку электронного письма, не будет выполнена.

Вам необходимо правильно получить данные и переосмыслить логи. c от вашего за l oop.

Хорошая помощь для отладки - это ввести в ваши журналы кода - например, Logger.log("log somethink") на стратегических c позициях, например, до и после ввода for l oop или и if оператор. Это поможет вам понять, где исполняется ваш код.

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