Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 通过编程创建的触发器仅适用于当前文件,而不管是否提供了其他文件的密钥_Google Apps Script_Google Sheets_Triggers - Fatal编程技术网

Google apps script 通过编程创建的触发器仅适用于当前文件,而不管是否提供了其他文件的密钥

Google apps script 通过编程创建的触发器仅适用于当前文件,而不管是否提供了其他文件的密钥,google-apps-script,google-sheets,triggers,Google Apps Script,Google Sheets,Triggers,当一个表单与另一个电子表格中的代码一起提交时,我试图通过编程为Google电子表格创建一个触发器,但它不起作用。这是我的密码: function createOnFormSubmitTrigger() { //Id of "Spreadsheet 1" var ssId = "18bq-67nP4y7F9Hp4jzpbKPCyAsR6hglgcfmxCi_zj14"; ScriptApp.newTrigger("formInput").forSpreadsheet(ssId).on

当一个表单与另一个电子表格中的代码一起提交时,我试图通过编程为Google电子表格创建一个触发器,但它不起作用。这是我的密码:

function createOnFormSubmitTrigger()
{
  //Id of "Spreadsheet 1"
  var ssId = "18bq-67nP4y7F9Hp4jzpbKPCyAsR6hglgcfmxCi_zj14";

  ScriptApp.newTrigger("formInput").forSpreadsheet(ssId).onFormSubmit().create();
}
如果我将该方法放入电子表格1并运行它,它将正常工作,并按预期在电子表格1中创建脚本。但是,如果我将该方法放入电子表格2中并运行它,它会在电子表格2中而不是电子表格1中创建触发器,这与预期不符。我做错了什么

以下是我为测试而制作的原始脚本和虚拟脚本的formInput代码:

原件:

function formInput()
{
  var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();

  var inSheet = spreadSheet.getSheetByName("Form Responses");

  var data = inSheet.getSheetValues(2,2,1,7);

  var minutes = data[0][0];
  var seconds = data[0][1];
  var numMissed = data[0][2];
  var sgIncorrect = data[0][3];
  var sfMissed = data[0][4];
  var year = data[0][5];
  var testLevel = data[0][6];
  var date = new Date();

  var outSheet = spreadSheet.getSheetByName(testLevel);

  var testLevelExists = (outSheet != null);

  if(testLevelExists)
  {
    outSheet.insertRowBefore(2);
    outSheet.getRange(2,1).setValue(date.getMonth()+1+ "/" + date.getDate());
    outSheet.getRange(2,2).setValue(year);
    var secStr = ("0" + seconds);
    outSheet.getRange(2,3).setValue(minutes + ":" + secStr.substring(secStr.length-2));
    outSheet.getRange(2,4).setValue(numMissed);
    outSheet.getRange(2,5).setValue(sgIncorrect);
    outSheet.getRange(2,6).setValue(sfMissed);
    outSheet.getRange(2,7).setValue(350-7*(sgIncorrect+numMissed)-2*(sfMissed));
    shiftBox(outSheet);
    setFormulas(outSheet);
    updateAverageTime(outSheet);
    inSheet.deleteRow(2);
    copyToMaster(spreadSheet,outSheet);
  }
}
假人:

function formInput()
{
  var hi = "hello";
}
从整体上看,

在谷歌的IDE上尝试一下你的所有功能


此外,从某个电子表格创建的触发器似乎可以从原始电子表格脚本的触发器菜单中查看,即使该触发器链接到另一个电子表格。

首先,我要感谢@JSmith提供的所有帮助。我似乎误解了使用ScriptApp API创建新触发器。创建脚本时,它将触发器链接到目标工作表上执行的操作,但代码必须位于创建触发器的原始工作表中。触发器也仅显示在创建触发器的工作表上。

您可能没有执行所需操作的权限。您是否在GSuite域中,这些是否为同一帐户等@tehhowch我不知道您所说的GSuite域是什么意思,因此我可能不在GSuite域中。这些文件都位于与我共享的文件夹的子文件夹中,因此我将仅在驱动器中尝试使用两个文件,然后返回给您。谢谢你的意思是ssID值是第一个电子表格的id,对吗?对吗@JSmith@I“-”我是史密斯帮我弄明白的。我误解了触发器的作用。据我现在所知,它在电子表格2上显示触发器,但触发器使用电子表格2中的方法在电子表格1上激活。一旦我从我最初的例子中完全弄明白了,我将发布一个回复。