当新用户提交表单时,如何重置“sortResponse”函数或“utilities.sleep计时器”?

问题描述 投票:0回答:1

背景: 我有一个“sortResponse”Google Sheets 应用程序脚本函数,该函数在 Google 表单提交后 3 分钟触发。

当有人提交表单时,新行将添加到工作表的底部。然后,我有一个第 3 方应用程序 (Zapier) 在这 3 分钟内从新行中提取数据。

问题: Zapier 需要 3-5 分钟来提取数据,因此如果用户 1 在 12:00 提交表单。用户 2 在 12:03 提交表单。我的“sortResponse”函数将在用户 1 的前 3 分钟后触发,并将底部的两行新行按工作表上的相应顺序排序,从而使 Zapier 在工作表底部只剩下一个空白行,并且没有数据可供提取。

我的问题: 当新用户提交表单时,如何重置“sortResponse”函数或“utilities.sleep 计时器”以重新启动 3 分钟计时器?

我当前的 Google 表格应用程序脚本:

/** @OnlyCurrentDoc */

function sortResponses() {
  Utilities.sleep(180000);
  var sheet = SpreadsheetApp.getActive().getSheetByName("Form Responses Master Data");
  sheet.sort(4,false); // Column 4: "Start Date" Sort by Descending Order
  sheet.sort(2, true); // Column 2: "Company" Sort by Ascending Order
}

我正在尝试但无法完成工作:

/** @OnlyCurrentDoc */

function sortResponses() {
  Utilities.sleep(180000);
  var sheet = SpreadsheetApp.getActive().getSheetByName("Form Responses Master Data");
  sheet.sort(4,false); // Column 4: "Start Date" Sort by Descending Order
  sheet.sort(2, true); // Column 2:"Company" Sort by Ascending Order
}

function initializeTrigger(){ // run this only once to create a trigger if necessary
  var sheet = SpreadsheetApp.getActive().getSheetByName("Form Responses Master Data");
 ScriptApp.newTrigger("resetFunctionTimer")
   .forSpreadsheet(sheet)
   .onChange()
   .create();
}

function resetFunctionTimer(e){
  Logger.log(e.changeType);
  if(e.changeType=='INSERT_ROW'){
    Browser.msgBox('New Row Added, wait 3 more min');
    Utilities.sleep(18000); // Sleeps 3 more min
  }
}

提前致谢。潜伏已久,第一次发海报。

google-apps-script google-sheets zapier
1个回答
0
投票

采纳@doubleunary的建议后,我最终修改了Google Apps脚本解决方案,并最终保持我的主数据表未排序,以使我的第3方应用程序能够提取最新数据。

而是在单独的工作表选项卡上对数据进行排序和过滤。

=sort(FILTER('Form Responses Master Data'!B2:K,NOT(REGEXMATCH('Form Responses Master Data'!F2:F,"Non"))),1, true, 3, false)

© www.soinside.com 2019 - 2024. All rights reserved.