如何在脚本中引入电子表格的onFormSubmit触发器?

时间:2013-03-19 19:29:46

标签: google-apps-script

有没有办法在脚本中触发电子表格的onFormSubmit?也就是说,而不是使用谷歌表格来触发onFormSubmit? 我尝试将以下sendHttpPost代码发布到电子表格Web App:

function sendHttpPostSelf() {
var payload = {
      "name" : "name",
      "comment" : "comment",
    };
  var options = {
      "method" : "post",
      "payload" : payload
    };
var url="https://script.google.com/macros/s/AKfycbzlVoiDQMbLe4yliErDoNub6A0m3tijSfPAUMEBENgIikQnLQ_H/exec";
var resp=UrlFetchApp.fetch(url,options);
Logger.log(resp.getContentText());
} 

代码正确触发电子表格Web App中的doPost()。但是,代码不会触发电子表格的onFormSubmit。或者,有没有办法在插入电子表格时编写 onInsert 触发器的脚本?

3 个答案:

答案 0 :(得分:0)

onFormSubmit触发器只会在Google表单提交时触发。获取Apps脚本代码来触发它是非常棘手/不受支持的。

如果您只想检测新行,可以使用onEdit触发器并检查范围以查看插入的内容。

https://developers.google.com/apps-script/understanding_events

答案 1 :(得分:0)

previous answer中提供了一系列事项 - 不触发onEdit及其问题跟踪ID。那里有示例代码,演示了对新行的检测......但需要注意的是,您需要执行其他类型的编辑来触发它!

所以,坏消息 - 尽管Arun的回答,插入行和写入值的脚本都不会触发onEdit。

答案 2 :(得分:0)

请告诉我,如果我错了,但是根据我的理解,你想要提交的价值不是通过谷歌表格,而是你自己建立的表格,你想提交doPost行动。
如果是这样,你可以做到这一点:
1 /使用appenrow()插入电子表格中doPost的数据 2 /在doPost()中调用通常使用onFormSubmit调用的函数(你需要转换为onFormSubmit函数的好参数(好像它是用一个真实的formSubmit调用的)

这是一个示例函数:

function onformSubmit(e){ 
  var answers = e.values;
  if (typeof(answers) == "undefined") answers = e;
  MailApp.sendEmail("youremailadress", "form first answer", answers[1]);

}
function doPost(e){
  MailApp.sendEmail("youremailadress","reponse doPost",e.parameter.name);
  SpreadsheetApp.openById("spreadsheet id").getSheetByName("spreadsheet name").appendRow([new Date(),e.parameter.name,e.parameter.comment]);
  var toe = [new Date(),e.parameter.name,e.parameter.comment];
  onformSubmit(toe);
  return(ContentService.createTextOutput().setContent("okey"));
}
function submitIt(){
  var payload = {
      "name" : "name",
      "comment" : "comment",
    };
  var options = {
      "method" : "post",
      "payload" : payload
    };
var url="https://script.google.com/macros/s/yourscripturl/exec";
var resp=UrlFetchApp.fetch(url,options);
}

当你启动submitIt()时,它将调用doPost,它将在你的电子表格中写入行,就像表单被提交时一样,然后它将调用函数onformsubmit(通常在表单被提交时调用)