0

有没有办法在脚本中触发电子表格的 onFormSubmit?也就是不使用google表单来触发onFormSubmit?我尝试将以下 sendHttpPost 代码发布到电子表格 Web 应用程序:

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 应用程序中的 doPost()。但是,代码不会触发电子表格的 onFormSubmit。或者,有没有办法在插入电子表格时编写onInsert触发器?

4

3 回答 3

0

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

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

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

于 2013-03-19T20:37:53.803 回答
0

在上一个答案中提供了一个不触发 onEdit 的事物列表,以及它们的问题跟踪 ID 。那里有演示检测新行的示例代码......但需要注意的是,您需要进行一些其他类型的编辑才能触发它!

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

于 2013-03-20T00:54:50.213 回答
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(通常在提交表单时调用)

于 2013-03-20T17:27:00.093 回答