0
votes

I was trying to write a script that, when you submit a google form, it puts a pdf link to my Google Sheets. However, there seems to be some kind of error. I don't have any experience at all with Google Sheets, so I just copied it from some YouTube video and adjusted it a bit.

https://www.youtube.com/watch?v=EpZGvKIHmR8

The problem says:

TypeError: Cannot read property 'namedValues' of undefined (line 27, file "Code")

Can someone help me to understand the reason of this error?

This is the sheet link: https://docs.google.com/spreadsheets/d/1j6H_qCdrgmxJ88EIOq0Pl-zxVgzt_QgNChTQqmzPey4/edit?usp=sharing

And here is the worksheet: https://docs.google.com/document/d/10qY2CgDNmMG_GnJGc2MeNvog19Mdnh4Ky68_vHkwScE/edit?usp=sharing

function afterFormsubmit(e) {
  const info = e.namedValues ;
  const pdfFile = createPDF(info);
  const entryRow = e.range.getRow();
  const ws = SpreadsheetApp.getActiveSpreadsheet.getSheetByName('Electric Forklift Incentive');
   ws.getRange(entryRow, 40).setValue(pdfFile.getUrl()); 
 }


 function createPDF(info) {

  const pdfFolder = DriveApp.getFolderById("1nYJkXEp6EgrCS3Z0rL1_hpVXh8Kunsa6");
  const tempFolder = DriveApp.getFolderById("1wHODapt8dd9XzK5IpfmdGuzNHrlr4IZt");
  const templateDoc = DriveApp.getFolderById("10qY2CgDNmMG_GnJGc2MeNvog19Mdnh4Ky68_vHkwScE");
  
  const newTemplateFile = templateDoc.makeCopy(tempFolder);
  
  const openDoc = DocumentApp.openById(newTemplateFile.getID());
  const body= openDoc.getBody();
    body.replaceText("{name}", info['ชื่อพนักงานขับรถ'][0]);
    body.replaceText("{brand}", info['ยี่ห้อ / รุ่น'][0]);
    body.replaceText("{dp}", info['หน่วยงาน'][0]);
    body.replaceText("{num}", info['หมายเลขรถ'][0]);
    body.replaceText("{met}", info['เลขมิเตอร์'][0]);
    body.replaceText("{po1}", info['หัวข้อพิจารณา [ 1. ระดับน้ำกลั่นในเเบตเตอรี่ (ยกเว้น BYD)]'][0]);
    body.replaceText("{po2}", info['หัวข้อพิจารณา [ 2. ระดับน้ำมันไฮดรอลิคและการรั่วซึม]'][0]);
    body.replaceText("{po3}", info['หัวข้อพิจารณา [ 3. ระดับน้ำมันเกียร์]'][0]);
    body.replaceText("{po4}", info['หัวข้อพิจารณา [ 4. ระดับน้ำมันเบรค]'][0]);
    body.replaceText("{po5}", info['หัวข้อพิจารณา [ 5. การทำงานของเบรคมือ]'][0]);
    body.replaceText("{po6}", info['หัวข้อพิจารณา [ 6. การทำงานของเบรค]'][0]);
    body.replaceText("{po7}", info['หัวข้อพิจารณา [ 7. ระบบเสียงสัญญาณแตร]'][0]);
    body.replaceText("{po8}", info['หัวข้อพิจารณา [ 8. ระบบไฟฟ้าแสงสว่างและสัญญาณไฟ]'][0]);
    body.replaceText("{po9}", info['หัวข้อพิจารณา [ 9. สภาพงาเเละการทำงานของงา]'][0]);
    body.replaceText("{po10}", info['หัวข้อพิจารณา [10. ระบบะสัญญาณไฟกระพริบหลังคา]'][0]);
    body.replaceText("{po11}", info['หัวข้อพิจารณา [11. ระบบสัญญาณเสียงขณะถอยรถ]'][0]);
    body.replaceText("{po12}", info['หัวข้อพิจารณา [12. ความสะอาดของตัวรถ]'][0]);
    body.replaceText("{po13}", info['หัวข้อพิจารณา [13. สภาพของตัวรถ]'][0]);
    body.replaceText("{po14}", info['หัวข้อพิจารณา [14. ความสะอาดเครื่องยนต์เเละห้องเครื่อง]'][0]);
    body.replaceText("{po15}", info['หัวข้อพิจารณา [15. สภาพเบาะนั่ง]'][0]);
    body.replaceText("{po16}", info['หัวข้อพิจารณา [16. สภาพของล้อ / น็อตกะทะล้อ]'][0]);
    body.replaceText("{po17}", info['หัวข้อพิจารณา [17. สภาพรอกโซ่และลูกกลิ้งแผงงา]'][0]);
    body.replaceText("{po18}", info['หัวข้อพิจารณา [18. ความเรียบร้อยของป้ายชื่อผู้ขับ]'][0]);
    body.replaceText("{po19}", info['หัวข้อพิจารณา [19. รายงานการตรวจสภาพรถยกประจำวัน]'][0]);
    body.replaceText("{po20}", info['หัวข้อพิจารณา [20. การตรวจสอบถังดับเพลิง]'][0]);
    body.replaceText("{add}", info['หมายเหตุ'][0]);
    body.replaceText("{request}", info['พบข้อเรียกร้อง'][0]);
    body.replaceText("{reqwhere}", info['จากช่องทาง '][0]);
    body.replaceText("{stat}", info['สถิติการมาปฏิบัติงาน'][0]);
    body.replaceText("{acci}", info['สถิติอุบัติเหตุประจำเดือน'][0]);
    body.replaceText("{acdate}", info['วันที่เกิดเหตุ'][0]);
    body.replaceText("{reason}", info['สาเหตุ'][0]);
    body.replaceText("{accip}", info['อุบัติเหตุที่พบ'][0]);
   
   openDoc.saveAndClose();
  
  
  const blobPDF = newTemplateFile.getAs(Mimetype.pdf);
  const pdfFile = pdfFolder.createFile(blobPDF).setName(info['ชื่อพนักงานขับรถ'][0]+ " " + ['หน่วยงาน'][0] + " " + ['หมายเลขรถ'][0]); 
  tempFolder.removeFile(newTemplateFile) ;    
   
   return pdfFile;

  
  }
2
How did you run the function of afterFormsubmit? I thought that in your script, when you directly run the function of afterFormsubmit with the script editor, such error occurs. So I'm worry about this.Tanaike
i ran it as afterFormsubmit. so how should have i ran it?Thanakorn Sairat
Thank you for replying. I have to apologize for my poor English skill. Unfortunately, from i ran it as afterFormsubmit. so how should have i ran it?, I couldn't understand about your situation.Tanaike
I run the function as afterFormSubmit and it had the problem said above. Should I had run the function as something else.Thanakorn Sairat
Thank you for replying. Unfortunately, I cannot understand about the method for executing the script from I run the function as afterFormSubmit. I apologize for my poor English skill. Can I ask you about the detail of it?Tanaike

2 Answers

1
votes

The error message you get indicates that ou are running the funciton afterFormSubmit(e) by pressing the "play button" from the Editor UI

This is not how onSubmit triggers work.

  • Your function expects the parameter e (event object).
  • As you can draw from the documentation, event objects like namedValues, range or values become available within a spreadsheet bound script on form submit.
  • To access those event objects, you need to bind a (installable form submit) trigger to your (form submit) event
  • For this, follow the instrucitons in the documentation - depending on the editor version you are using
  • Create a new form submit trigger and bind it to the function afterFormSubmit(e)
  • Do not try to run the function afterFormSubmit(e) manually (if you do so - the event object e will be empty since there was no form submit event)
  • When a new form submission has taken place, the function afterFormSubmit(e) will fire automatically by the trigger.
0
votes

so after the suggestions and answers I set up a trigger bind it to the afterFormSubmit(e).but I got another error saying TypeError: Cannot read property 'ยี่ห้อ / รุ่น' of undefined (line 46, file "Code") (it's the body replace one).Is this connected to the trigger I installed? that i have to fix the script ?