Google Forms onsubmit

2020-02-11 02:08发布

问题:

How does one reference the default 'Submit' Forms button to link the 'onsubmit' trigger with another action? Thank you.

For example, with onsubmit,

Logger.log('do something');

回答1:

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.

These references explain triggers and events.

  • Using Container-Specific Installable Triggers
  • Understanding Events


回答2:

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

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

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

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

function onSubmit() {
  MailApp.sendEmail("fred@email.com,alice@email.com",
                    "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)

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

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

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

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



回答3:

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){ ...



回答4:

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("me@example.com",
                "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



回答5:

JohnB's HOWTO above is excellent. Update (Nov 2017):

  • Step 2: "Script Editor..." is in the vertical "..." burger menu top right of form
  • Step 6: "Project Triggers" is found in the (clock-like icon) (second icon displayed above).
  • Step 7: Click "Add a new trigger", ignore the "no myFunctions" warning.
  • Step 8: doesn't seem to exist, may not be necessary, works for me without.

Many of the steps above require validation/acceptance by the form owner.