Google Forms onsubmit

This is an old answer.

Currently (Jan 2014) there are two ways for onSubmit. One is simply to make a function onSubmit() which supposedly (it doesn't work for me...) allows a limited set of actions under the permission of the current submitting user only. You cannot access his submitted email, for example, or modify the underlying form for next submit.

Then there is is the trigger on submit which you can add and attach to any function and do whatever you want under your own permissions. looks same as screenshot of trigger adding in the answer above, except that its the first column shows methods in you forms script, the next column reads: From-Form and in the third column you choose: On Submit.

Typically your method will receive an event e , who's e.values are the same as the values saved in the spreadsheet. So

function formSubmitted(e){ ...


There seems to be two applications which trigger code: (1) the form and (2) the spreadsheet linked to the form responses.

(1) There is not much one can do programmaticly from the form as the event is not sent to functions, as noted by Mogsdad and JohnB above. One can, for example, send an email "On form submit" or "On open" but without the event object, one can't even record the number or rows nor anything about the document or submission.

(2) However, if a spreadsheet is linked to the responses of the form, then a trigger can be set on the spreadsheet, where one has access to the event and thus row, column, and other data.

From linked response Google Spreadsheet:

  • Step 1: Tools > Script editor
  • Step 2: write some code, for example:

Code.gs:

function onSpreadsheetSubmit(e) {
     var row = e.range.getRow();
     MailApp.sendEmail("[email protected]",
                "Your subject, rows: "+ row,
                "A new application has been submitted on row: "+
                row,
                {name:"From your friendly spreadsheet"});
}
  • Step 3: Run > Run function > onSpreadsheetSubmit (or |> icon)
    • The event likely doesn't have an actual row because the test is not associated with a real submit.
  • Step 4: You'll be asked to choose a user and authenticate yourself
  • Step 5: Edit > Current project's triggers (or clock-like icon)
  • Step 6: Add a new trigger
  • Step 7: onSpreadsheetSubmit | From spreadsheet | On form submit
  • Step 8: Authenticate and Save (or reverse)
  • Step 9: Test by waiting (or executing) a real form submission
  • Step 10: Check your email

For more info: https://developers.google.com/apps-script/guides/triggers/events#google_sheets_events


Instead of adding a script to the Spreadsheet receiving responses from the Form (as in Mogsdad's answer), I added a script which gets triggered by the Form's Submit button.

Step 1: first create a Google Form

sample Google Form

Step 2: Then from the menu, click Tools->Script editor

Form editor menu bar

Step 3: give your function a name like onSubmit()

Script editor

Step 4: Write some code to send an email like this, then test by click Run button

function onSubmit() {
  MailApp.sendEmail("[email protected],[email protected]",
                    "Subject",
                    "A new application has been submitted.\n\n" +
                    "Here is the link to all Applications:\n" +
                    "https://docs.google.com/spreadsheets/x/1-fdasjhFAKEfdaahfkhsa/",
                    {name:"From Name"});
}

Step 5: in the Script Editor's menu, click Run, or click the Play button on the toolbar to test your code (e.g. make sure you get the email)

Menu bar Run command

Step 6: in the Script Editor's menu, click Resources-> Current project's triggers

Script Editor menu bar

Step 7: select the settings Events From form On form submit

Google App Triggers

Step 8: Then from the Form Editor's menu, click Tools->Script manager and make sure your script is selected

Script manager

Step 9: try the form. You should get an email after clicking the form's submit button.

Google Apps live Form


One doesn't. The Form Service does not allow any programmatic control over the product. There is an open issue on the Issue Tracker for this general topic. Star it to "vote", and receive updates.

However, you're not lost. In the spreadsheet receiving your form responses, you can add a script with an Installable Trigger to fire "On form submit". From there, you can do many things to the submitted data, including Logging as you wish... but nothing to the Form itself.

Triggers

These references explain triggers and events.

  • Using Container-Specific Installable Triggers
  • Understanding Events