Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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
Performance 函数从“开始”缓慢执行;论编辑;触发器,但如果手动执行,则速度很快_Performance_Google Apps Script_Google Sheets_Triggers - Fatal编程技术网

Performance 函数从“开始”缓慢执行;论编辑;触发器,但如果手动执行,则速度很快

Performance 函数从“开始”缓慢执行;论编辑;触发器,但如果手动执行,则速度很快,performance,google-apps-script,google-sheets,triggers,Performance,Google Apps Script,Google Sheets,Triggers,脚本正在执行“编辑”功能,该功能将根据用户选择的值更改相关字段。或多或少,简单的操作 如果由触发器执行,则执行需要8到20秒 如果我手动运行它(在脚本编辑器的常规或调试模式下),它将在不到一秒钟的时间内完成 对可能发生的事情有任何暗示吗 我的职能: function onOpen() { ScriptApp.newTrigger("onEdit").forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet()).onEdit().creat

脚本正在执行“编辑”功能,该功能将根据用户选择的值更改相关字段。或多或少,简单的操作

如果由触发器执行,则执行需要8到20秒

如果我手动运行它(在脚本编辑器的常规或调试模式下),它将在不到一秒钟的时间内完成

对可能发生的事情有任何暗示吗

我的职能:

    function onOpen() {
  ScriptApp.newTrigger("onEdit").forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet()).onEdit().create();
}

function onEdit(){
  var activeCell = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getActiveCell();
  var tabLists = "data-validation";


  // VALIDATION RULES FOR EXTENSIONS
  if(activeCell.getColumn() == 3 && activeCell.getRow() >= 7){


    if (activeCell.getValue() != "") {

      var sheet = SpreadsheetApp.openById("xx").getSheetByName(tabLists);
      var packages = sheet.getRange(2, 4, 60, 1).getValues();


      var packageIndex = Array.prototype.concat.apply([], packages).indexOf(activeCell.getValue()) + 1;

      if (packageIndex != 0) {

        var packageIndexLast = Array.prototype.concat.apply([], packages).lastIndexOf(activeCell.getValue()) + 1;


        var validationRange = sheet.getRange(packageIndex + 1, 5, (packageIndexLast - packageIndex + 1) , 1);
        var rangeData = validationRange.getValues().map(function(value,index) { return value[0]; });
        var validationRule = SpreadsheetApp.newDataValidation()
        .requireValueInList(rangeData, true)
        .setAllowInvalid(false)
        .setHelpText("Pick an extension").build();


        activeCell.offset(0, 2).clearContent().clearDataValidations().setDataValidation(validationRule);

      }
    }
    else {
      activeCell.offset(0, 2).clearContent().clearDataValidations();
    }
  } 
}

我的水晶球需要抛光-在你没有发布的代码中看不到任何东西。谢谢@tehhowch,我试图将问题集中在执行和调试之间的差异上,因为代码是相同的,而性能是完全不同的。也许问题只与配置有关,而与代码本身无关,因为如果问题与代码有关,则两种情况下的性能应该相同。。。无论如何,我已经发布了编辑功能,以防万一,我创建了另外两个电子表格,并在第三个电子表格中运行了您的代码,可能是作为用户从ss运行代码的20倍(编辑时触发)。所有的测试都在0.8秒到3秒之间运行,大部分时间在1秒左右。我还稍微修改了您的代码,以消除重复的get(例如getValue()),我认为它们可以被调用一次并设置为var(另外我使用了e.value和e.range,我不知道这是否有帮助)。它运行得更快,通常低于0.5秒。我没有从考试开始debug@davidmorales你能解释一下它运行缓慢和“正常”运行的情况吗?谢谢@DavidTew,我会检查代码。我的主要问题是,当我从脚本(执行或调试)执行函数时,它运行得非常快,但从excel本身执行函数需要花费太多时间。