получение данных формы документов Google по электронной почте

Я использовал несколько сценариев, которые нашел в Интернете, и столкнулся с той же проблемой. У меня есть несколько форм документов Google, которые мне нужны для получения отправленных данных по электронной почте (а не только уведомления о том, что форма была отправлена ​​и соответствующая электронная таблица была обновлена). Этот скрипт БЫЛ работает, но по какой-то причине остановился:

function sendFormByEmail(e) 
{    
// Remember to replace XYZ with your own email address
var email = "[email protected]"; 

// Optional but change the following variable
// to have a custom subject for Google Docs emails
var subject = "Google Docs Form Submitted";  

// The variable e holds all the form values in an array.
// Loop through the array and append values to the body.

var s = SpreadsheetApp.getActiveSheet();
var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0];    
var message = "";    

// Credit to Henrique Abreu for fixing the sort order

for(var i in headers)
  message += headers[i] + ' = '+ e.namedValues[headers[i]].toString() + "\n\n"; 

// This is the MailApp service of Google Apps Script
// that sends the email. You can also use GmailApp here.

MailApp.sendEmail(email, subject, message); 

// By Amit Agarwal - www.labnol.org
}

На что я получаю сообщение об ошибке: TypeError: Cannot read property "namedValues" from undefined. (строка 20)

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


person user1919305    schedule 20.12.2012    source источник


Ответы (2)


Вам нужно будет выполнить некоторую отладку, вставляя тестовые примеры, пока вы не решите свою проблему, например, например, если вы получаете ошибку line 20 для namedValues, проверьте e перед доступом к ней следующим образом:

for(var i in headers)
    if (e && e.namedValues)
       message += headers[i] + ' = '+ e.namedValues[headers[i]].toString() + "\n\n"; 
person Community    schedule 20.12.2012

Вероятно, это связано с пустыми данными в некоторых столбцах. Я бы предложил удалить/удалить все ваши существующие триггеры для формы, а затем использовать приведенный ниже код (я ссылался на код Амита Агарвала - www.labnol.org)

function Initialize() {

  var triggers = ScriptApp.getProjectTriggers();

  for(var i in triggers) {
    ScriptApp.deleteTrigger(triggers[i]);
  }

  ScriptApp.newTrigger("SendGoogleForm")
  .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
  .onFormSubmit()
  .create();

}

function SendGoogleForm(e) 
{  
  // The variable e holds all the form values in an array.
  // Loop through the array and append values to the body.
  try 
  {      
    // You may replace this with another email address
    var email = "[email protected]";

    // Optional but change the following variable
    // to have a custom subject for Google Form email notifications
    var subject = "Training Application Form Submitted";  

    var s = SpreadsheetApp.getActiveSheet();
    var columns = s.getRange(1,1,1,s.getLastColumn()).getValues()[0];    
    var message = "";    

    // Only include form fields that are not blank
    for ( var i in columns ) 
    {
      var header = columns[i];
      if ( e.namedValues[header] && (e.namedValues[header] != "") ) 
      {
        message += header + ' :: '+ e.namedValues[header] + "\n\n"; 
      }
    }
    // This is the MailApp service of Google Apps Script
    // that sends the email. You can also use GmailApp for HTML Mail.

    MailApp.sendEmail(email, subject, message); 

  } 
  catch (e) 
  {
    Logger.log(e.toString());
  }

}

Затем просто сохраните, запустите функцию инициализации, примите разрешения.

person worldwrite    schedule 04.03.2015