Использование Google Sheets, заполненных Google Forms, для отправки электронного письма для каждого нового ответа - PullRequest
1 голос
/ 15 января 2020

Увидел несколько похожих опций в SO, но ничего, что могло бы помочь.

Я управляю командой из нескольких команд, в которой они заполняют форму Google . Они заполняют Google Sheet , и я хотел бы, чтобы список писем (лист 2) получал электронное письмо, содержащее все ответы на каждый ответ.

Письмо выглядело бы как жирный вариант каждого вопроса, а под ним - ответ. Информация в электронном письме должна относиться к их ответу в столбце F. В идеале у вас должен быть заголовок электронного письма как «FORM AB C - DATE - Submitter» или «COLUMN F - COLUMN E - COLUMN C».

В настоящее время у меня есть 1 форма для каждой команды, и цель состоит в том, чтобы руководитель группы получил электронное письмо, когда его команда отправляет ответ (найдено в КОЛОННЕ D). Если это невозможно, я могу просто сделать несколько форм, уникальных для каждой команды.

* РЕДАКТИРОВАТЬ: будет добавлено больше столбцов для дополнительных вопросов для каждого раздела формы.

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

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2; // Start at second row because the first row contains the data labels
  var numRows = 3; // Put in here the number of rows you want to process

  // Fetch the range of cells A2:B4
  // Column A = Email Address, Column B = First Name
  var dataRange = sheet.getRange(startRow, 1, numRows, 2)

  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (i in data) {
   var row = data[i];
   var emailAddress = row[0]; // First column of selected data
   var message = "Hey " + row[1] + ",\n how are you doing today?"; // Assemble the body text
   var subject = "Sending emails from a Spreadsheet";
   MailApp.sendEmail(emailAddress, subject, message);
  }
}

1 Ответ

0 голосов
/ 16 января 2020

Мое решение состоит в том, чтобы создать таблицу HTML из Листа с ответами формы, сгруппировать их по команде и отправить их соответствующим руководителям.

Это не будет работать при регистрации нового ответа, только вручную. Триггеры не могут отправить электронное письмо. См. Ограничения триггера .

function main(){

  var sprsheet = SpreadsheetApp.getActiveSpreadsheet();

  var supervisors = sprsheet.getSheetByName("Sheet2").getDataRange().getValues(); //Gets all the data from Sheet 2
  var data = sprsheet.getSheetByName("Form Responses 4").getDataRange().getValues(); //Same for Form Responses 4

  for (var i = 1; i < supervisors.length; i++){
    var counter = 0;
    var table;
    var header = "<table border=1><th>TimeStamp</th><th>Submitter email</th><th>Submitter</th><th>Team</th><th>Date</th><th>Which form is this?</th><th>Did you walk the walk?</th><th>Did you talk the talk?</th><th>Did you love me?</th><th>Do you want to squeez me?</th>";

    for (var j = 1; j < data.length; j++){ 

      if (supervisors[i][2] == data[j][3]){ //Teams are located at cols C and D respectively 
        table = createTable(data, header);
        counter++;
      }

    }
    if (counter > 0){
      var subject = "Sendimg emails from a Spreadsheet";
      var message = "<html><body>Hey " + supervisors[i][0] + ",\n how are you doing today? <br>";  
      table += "</table></body></html>";

      MailApp.sendEmail({
        to: supervisors[i][1], 
        subject: subject,
        htmlBody: message + table});  
    }
  }

}

function createTable(data, table){ 

  var cells = [];  
  //The table is a 2D array
  for (var i = 1; i < data.length; i++){
    cells = data[i]; //puts each cell in an array position
    table += "<tr>"; //Row starts

    for (var u = 0; u < cells.length; u++){
      table += "<td>"+ cells[u] +"</td>"; //New column
    }
    table += "</tr>"; //Row ends
  }
  return table
}

Ссылки

...