通过数组对象定义变量时,onEdit可安装触发器不会触发

时间:2017-11-14 14:09:16

标签: google-apps-script google-sheets

HeJ小鼠! 我有一个应该在onEdit上触发的脚本。 onEdit()作为一个简单的触发器对我来说不是一个选项,因为脚本需要授权。使用编辑器设置可安装触发器时,仅在手动定义特定变量时触发触发器,而在使用数组定义时不触发触发器。 因为我不知道问题出在哪里(我试图逐个注释掉代码,但是当它转到最后一部分时它总是不起作用。

        function myFunction() {
     //Source Sheet for different sheets
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var activeSheet = ss.getActiveSheet();
      var activeRange = ss.getActiveRange();
      var activeRow = activeRange.getRowIndex();
      var CategoryValues = ss.getSheetValues(activeRow, 4, 1, 14);
      var ID = activeSheet.getRange(activeRow,2).getValue();
      var red = '#e06666'

  // Defining the sourceWeekNumber in the sourceSheet with a while loop
      var sourceWeeks = activeSheet.getRange(1,1,activeRow).getValues();
      sourceWeeks.reverse();
      var sourceWeekColor = activeSheet.getRange(1,1,activeRow).getBackgrounds();
      sourceWeekColor.reverse();
      var sourceWeekNumber = [];
      var sourceWeekIndex=1;
        while (sourceWeekColor[sourceWeekIndex-1]!=red) {
          if (sourceWeekColor[sourceWeekIndex]==red) {
          sourceWeekNumber.push(sourceWeeks[sourceWeekIndex])
          }
          sourceWeekIndex++;
      }

      //Target sheet is always mastersheet
      var ts = SpreadsheetApp.openById('ID').getSheetByName('mastersheet');

      //Finding the right spot in mastesheet
      //Validate the weeknumber
      var validWeek = ts.getRange(2, 1, ts.getLastRow()).getValues();
      var rowIndex = [];

  //-----> var sourceWeekNumber = 'v50'; <----- 
  // When defining this variable manually, onEdit works fine.
  // When defining sourceWeek with the while loop above, the onEdit does not trigger.

      // Find the right week and it's row in the mastersheet
      var validWeekIndex = 1; 
      while (validWeek[validWeekIndex] != sourceWeekNumber) {
        if (validWeek[validWeekIndex] == sourceWeekNumber) {
        var validID = ts.getRange(validWeekIndex+3,2, ts.getLastRow()).getValues();
        rowIndex.push(validWeekIndex);
        }
        validWeekIndex++;
      }
    }

我尝试了不同的东西,总是使用Logger.log()或Browser.msgBox()来尝试识别问题。任何想法或解决方法?我已经坚持了3天,现在找不到任何解决方案。 我也准备了样本表,如果需要,我可以编辑它。 提前谢谢!

编辑: 以下是样本表的链接:https://docs.google.com/spreadsheets/d/1xCZur6gpfsQFPtwKcTl0XPPfG8zlTqGVlm1GZZ8X1xM/edit?usp=sharing

1 个答案:

答案 0 :(得分:0)

我明白了。 这当然不是触发器,但是让我认为它的不同因素是:

  1. 触发通知:我确定我已经将通知设置为immidiatly,但它设置为每天下午4点。这就是我没有收到失败通知的原因。
  2. while循环:因为while循环无法识别2D阵列中1D阵列的值何时出现,所以它会一直运行并超时。因此,脚本运行5分钟,无法取消它。
  3. 我了解到Google获得了触发器脚本运行时间为30分钟/天的配额,这就是为什么我只能在配额满了之前运行6个失败的脚本并且脚本无法运行直到第二天,我才意识到这是一个问题。
  4. 编辑:对于将来的引用,我只是使用sourceWeekNumber.toString()来使它与另一个数组匹配,比较一个字符串而不是数组中的对象。

相关问题