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é.
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.