Google Form Response Submit and Google Sheet Update - google-apps-script

I have a script I am working on and need some help.
First how my script is supposed to work.
Script: A user fills out google form and hits submit. Upon submit my script runs and reads from the google sheet a range of data cells that I manipulate in sheets. The data cells then get formatted into a string and prompted in the Confirmation Message of the form.
Now for the problem.
Problem:
When I submit my responses to the form everything from sheets works fine. When I run my code manually the code works fine. When I submit my form responses, the event history shows the trigger and says it completes, but the end result(the confirmation message updating) doesn't take place.

Not Possible.
FormSubmit trigger and subsequent script execution is a asynchronous operation. The Form doesn't wait for the script to complete(and change the confirmation message). You can send a email for confirmation.

Related

How can I trigger a Sheets script from a Google Form Submission?

I wrote a script for a Google Sheet that emails a user some specific info relevant to them alone. It works fine with the onOpen trigger, but I don't want them to have to open the sheet each time.
It would be easier to submit a form request and then receive the email but I'm not sure how to do that. I'm sure this is very basic so apologies for that, I'm new to this.
Basically I would like to form to ask if they want to receive an email with the info, and if they say yes, it triggers the script.
There are two ways to do this. The first is to:
Link the form responses to the spreadsheet
Add the installable trigger on form submit to the spreadsheet on the function you want to run.
Get the necessary information from the event object to see who submitted the form.
The second way is to:
Place a script on form.
Put an onFormSubmit() trigger on the form
Have the form open the spreadsheet - SpreadsheetApp.openById()
Copy paste the spreadsheet code into the form, making adjustments, so it will run (will mostly be how to get the user data)
If you would like this to only occur if the respondent asks, you can place a yes/no question on the form and check the answer. You can also have a questionless form that only collects emails, if you just want them to submit it to trigger an email.
there might be useful to do a template with a form with two buttons, 'Yes' or 'No'. If they hit 'Yes' you can hit an API in your platform to run script.
Maybe you can use a redis or some database to save the preferences of this user.
Hope it helps.

Google Spreadsheet trigger programmatically added is not

I want to process values submitted from a Google Form when they get saved in the associated spreadsheet. I have an app script associated with the form (as it adds an addon menu there and is suppose to be used from FormApp), and this one install the trigger on destination spreadsheet as following.
ScriptApp.newTrigger('onFormSubmit').
forSpreadsheet(destId).onFormSubmit().create();
function onFormSubmit(e) { Logger.log("--> submit"); }
I also have added an email notification (Immediate) on the trigger.
The trigger appears in project triggers. Calling the onFormSubmit function from editor, or on other event, is working and debug statement is written in the log.
When the form is POSTed, I don't either see anything in the log, nor receive any mail notification.
What's wrong there?

Google Script Error: You do not have permission to call openById

I am trying to send a mail with attaching a file available in my google drive using following google scripts
var file=DriveApp.getFileById('1qZVK0UZ1jLbDdj10FXZqeAVEodvxEy2Bs');
MailApp.sendEmail('xyz#gmail.com','subject','body',{attachments[file.getAs(MimeType.PDF)]});
when I run above script manually it runs fine, email gets sent. But when I run it using form Submission trigger it gives error "You do not have permission to call openById"
steps that will reproduce the problem?
create a google form.
write above scripts on script editor and add a trigger with submission of the form.
fill and submit the form then you will get above error into mail from 'apps-scripts-notifications#google.com'
Please help.
I ran into this same issue, but felt it was a little silly to have to use the FormResponses Sheet to get the submission event (I mean there's a trigger on the Form Apps Scripts for a reason, right?).
All I had to do was to Remove and Re-add the trigger for From form --> On form submit. When I added it, challenged me for OAuth permissions to view and use my google drive.
Immediately after this, I was able to run on a Forms Apps Script Submission trigger again.
I found this when creating the script on the Form itself.
To solve the problem first have you form responses sent to a spreadsheet.
From you form go to Tools > Script editor... copy you script and delete any triggers you have set up there, you won't be needing this script anymore.
Now click on View responses button in your form to open the spreadsheet.
Go to Tools > Script editor... (for the spreadsheet).
You should start with a blank project.
Delete anything in there and paste in your script.
Save and name you project.
Now set up your triggers as normal. You will find the third drop down list of the new trigger has the option On form submit.
Once your script is authorised any time the form is submitted the event will trigger and will have access to the DriveApp.
Once you've tested and got it working I would go back to the form and delete the script project in there. I do that to keep things tidy and save confusion if I come to alter the script later and have forgotten which one is actually live.
I don't know if there is a limitation with Google Forms that limits their access to Drive or something.

Google Apps Forms

I am trying to develop a form. I have created it and am getting responses in a worksheet. However, after amendment I am getting blank columns where changes were made.
I tried deleting the Response sheet but it appears not to make a difference.
Secondly is there a way of running a script when the Form Submit button is clicked?
1:
Reconnect the form to the response sheet or create a new response sheet.
You are not supposed to mess with the response sheet data or format.
2:
see trigger onFormSubmit

How to get onFormSubmit to trigger automatically?

The "fix" (test_onformsubmit) code you gave, I have to manually run it every time there is new data in the spreadsheet. I was wanting it to automatically send the pdf to email when Form is submitted. Is there a way? Because the manual way runs the code exactly like its supposed to, but I want this as an automatic event so I don't have to do anything.
See parent thread of original problem/question
Read Understanding Triggers. This function is an Installable Trigger, so you need to set it up to run when a form is submitted. It's easy - I would have thought a Forms tutorial would have walked through it.
In the Script Editor:
Choose Edit > Current project's triggers. You see a panel with the message No triggers set up. Click here to add one now.
Click the link.
Under Run, select the function you want executed by the trigger. (That's onFormSubmit(), in this case.)
Under Events, select From Spreadsheet.
From the next drop-down list, select On form submit.
Click Save.
From this point on, the function will be triggered whenever a form is submitted to the spreadsheet.
If you plan to share your script, each recipient will need to repeat these steps.
As an aside, you should change the email setting in your script, so it will work for ANYONE.
var email_address = Session.getActiveUser().getEmail();