Obtenir TypeError dans onformsubmit trigger?

j'ai utilisé un tutoriel de formulaires Google pour modifier les données de formulaires pour fusionner dans un PDF et ensuite envoyer à un e-mail. Je reçois le message d'erreur suivant lorsque j'essaie d'exécuter le script:

TypeError: ne peut pas lire la propriété "values" à partir de non défini. (ligne 11, fichier "Code")

je ne sais pas comment résoudre le problème. J'ai cherché sur le web pour une réponse. Voici une copie du script. J'ai marqué les 2 lignes où le script donne une erreur:

var docTemplate = "1ZSqmId2BBjtz6PmgQEmusjnkHGsFKD1CBSq0rrQk6Kc";  
var docName     = "TestCertificate";

// When Form Gets submitted

function onFormSubmit(e) {

//Get information from form and set our variables 

var email_address = "EMAIL@example.com";

//**(THIS IS WHERE THE ERROR IS OCCURRING ON THESE 2 LINES BELOW!)**

var full_name = e.values[2];
var Activity = e.values[3];

// Get document template, copy it as a new temp doc, and save the Doc’s id

var copyId = DocsList.getFileById(docTemplate)
.makeCopy(docName+' for '+full_name)
.getId();

// Open the temporary document

var copyDoc = DocumentApp.openById(copyId);

// Get the document’s body section

var copyBody = copyDoc.getActiveSection();

// Replace place holder keys,in our google doc template 

copyBody.replaceText('keyFullName', full_name);
copyBody.replaceText('keyActivity', Activity);



// Save and close the temporary document

copyDoc.saveAndClose();

// Convert document to PDF

var pdf = DocsList.getFileById(copyId).getAs("application/pdf"); 

// Attach PDF and send the email

var subject = "Report";
var body    = "Here is the form for " + full_name + "";
MailApp.sendEmail(email_address, subject, body, {htmlBody: body, attachments: pdf}); 

// Delete temp file

DocsList.getFileById(copyId).setTrashed(true);
}

Voici des liens vers le formulaire et le certificat que j'ai testé.

4
demandé sur Mogsdad 2013-08-01 06:25:20

1 réponses

l'erreur que vous voyez est parce que vous exécutez une fonction de déclenchement dans l'éditeur de Script. Lorsque vous faites cela, le paramètre D'événement e n'est pas défini - c'est ce que dit le message d'erreur.

pour plus de détails, voir Comment puis-je tester une fonction de déclenchement dans le gaz?

Voici une fonction de test qui exécutera votre fonction onFormSubmit() plusieurs fois, avec les données qui sont déjà dans votre tableur. Il lit chaque ligne de la feuille, génère un objet pour simuler l'Événement, vous obtiendrez lorsque le formulaire a été soumis, puis appelle la fonction de déclenchement. Si vous placez des points de rupture à l'intérieur de onFormSubmit() , ou si vous utilisez Logger.log() , cette technique vous permettra de tester votre fonction de déclenchement.

function test_onFormSubmit() {
  var dataRange = SpreadsheetApp.getActiveSheet().getDataRange()
  var data = dataRange.getValues();
  var headers = data[0];
  // Start at row 1, skipping headers in row 0
  for (var row=1; row < data.length; row++) {
    var e = {};
    e.values = data[row];
    e.range = dataRange.offset(row,0,1,data[0].length);
    e.namedValues = {};
    // Loop through headers to create namedValues object
    for (var col=0; col<headers.length; col++) {
      e.namedValues[headers[col]] = e.values[col];
    }
    // Pass the simulated event to onFormSubmit
    onFormSubmit(e);
  }
}

Je n'ai fait aucun autre débogage de votre fonction originale... mais cela élimine ce message d'erreur, de sorte que vous pouvez continuer à tester.

5
répondu Mogsdad 2017-05-23 11:52:50