脚本未在表单提交时运行

Script not running On Form Submit

提问人:Ademola 提问时间:10/4/2023 最后编辑:Ademola 更新时间:10/6/2023 访问量:44

问:

我有一个脚本,每当表单响应数据表中提到关键字时,它就会创建一个时间戳。我还设置了一个触发器,以便在提交表单时运行。当我提交表单时,它显示触发器已运行并已完成,但是除非我手动运行脚本,否则它不会更新工作表。这是有原因的吗?
[触发器设置]:https://i.stack.imgur.com/pIsk8.png [执行日志]:https://i.stack.imgur.com/ivQgN.png

function onFormSubmit() { 
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet2 = ss.getSheetByName('Data Overview');
const sheet4 = ss.getSheetByName('Dewar ID');

if(sheet2.getRange(sheet2.getLastRow(),sheet2.getLastColumn())
.getValue().toString().includes("Dewar1"))
{sheet4.getRange(3,4).setValue(new Date())};
}
if-statement google-apps-script google-sheets 触发器

评论

0赞 TheMaster 10/5/2023
显示执行日志?
0赞 Ademola 10/5/2023
我在问题中添加了执行日志的图片链接
0赞 Cooper 10/5/2023
您是否将 onFormSubmit 触发器用于表单或电子表格。有两个触发器可供选择
0赞 Ademola 10/5/2023
从事件源下拉列表中,我选择了“来自电子表格”,从事件类型下拉列表中,我选择了“在表单提交时”。
0赞 Cooper 10/5/2023
请提供一个最小的可重复示例

答:

0赞 Cooper 10/5/2023 #1

这对我有用。

function onMyFormSubmit(e) {
  Logger.log(JSON.stringify(e));// you take a look at the event object
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sh0 = ss.getSheetByName('Sheet0');
  const sh1 = ss.getSheetByName('Sheet1');
  if (sh0.getRange(sh0.getLastRow(), sh0.getLastColumn()).getDisplayValue().includes("Dewar1")) { 
    sh1.getRange(3, 4).setValue(new Date()) };
}

这几乎是一回事,而且工作正常

下面是一个函数,可帮助您创建正确类型的触发器。也许您应该将函数和触发器的名称更改为您从未使用过的名称。

function createOnFormSubmitTriggerForSpreadsheet() {
  const ssid=SpreadsheetApp.getActive().getId();
  const resp=SpreadsheetApp.getUi().prompt("Create On Form Submit Trigger", "Enter Function Name", SpreadsheetApp.getUi().ButtonSet.OK_CANCEL);
  if(resp.getSelectedButton()==SpreadsheetApp.getUi().Button.OK) {
    let funcname=resp.getResponseText();
    if(!isTrigger(funcname)) {
      ScriptApp.newTrigger(funcname).forSpreadsheet(ssid).onFormSubmit().create();   
    }
  }
}

评论

0赞 Ademola 10/5/2023
但是,代码可以工作,它似乎只有在我手动运行脚本时才有效。
0赞 Cooper 10/6/2023
它在 onFormSubmit 触发器上对我有用。你的触发器一定有问题。我将添加一个函数来帮助您创建 onFormSubmit 触发器。我开始怀疑您是否没有另一个 onMyFormSubmit 触发器,因为这是一个问题。所有函数都必须具有唯一的名称。