函数onEdit()仅部分运行

时间:2017-11-22 15:15:17

标签: google-apps-script

我的手上有一个非常令人沮丧的问题,我再次求助于你。我在下面有onEdit()函数,它与辅助函数一起工作正常。

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet();
  var activeCell = activeSheet.getActiveCell();

  //Check if the sheet is a JOb sheet and the cell us the status cell
  if ( activeSheet.getName().indexOf("Job ID") != -1 && activeCell.getRow() == 4 && activeCell.getColumn() == 15 ) {
    var targetSheet = ss.getSheetByName('Active Jobs');
    var jobRowNumber = findJobIdRow();
    var sourceCell = activeSheet.getRange(4,15);
    sourceCell.copyTo(targetSheet.getRange(jobRowNumber,16));
  }

  if (activeSheet.getName().indexOf("Job ID") != -1 && activeCell.getRow() == 2 && activeCell.getColumn() == 15){
    var switchValue = activeCell.getValue();
    switch (switchValue){
      case "On hold (i)":
      case "On hold (ii)":
      case "On hold (iii)":
      case "To be assigned":
        //Write date to active jobs sheet
        addDateToActive("TBC");
        break;
      case "In progress":
        var newDate = Browser.inputBox("Please enter report out date, example 18-Aug-2017");
        addDateToActive(newDate);
        break;
      //default:
        //Browser.msgBox("GOTHERE");
    }
  }
}

function findJobIdRow() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var jobID = ss.getActiveSheet().getRange(2,1).getValue();
  var column = ss.getSheetByName('Active Jobs').getRange(2,1,ss.getSheetByName('Active Jobs').getMaxRows()-2,1);
  var values = column.getValues(); // get all data in one call
  for(var ct = 0; ct < values.length-1; ct++){
    if(values[ct][0] == jobID){
      var ct = ct+2;
      break;
    }
  }
  return ct;
}

function addDateToActive(input){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet();
  var activeCell = activeSheet.getActiveCell();
  var jobid = activeSheet.getRange(2,1).getValue().toString();
  var activeJobSheet = ss.getSheetByName("Active Jobs");
  var activeJobs = activeJobSheet.getRange(1,1,activeJobSheet.getLastRow(),1).getValues();
  activeJobs = ColumnToArray(activeJobs);
  var jobrow = activeJobs.indexOf(jobid)+1;
  if (jobrow == -1){
    Browser.msgBox("Job Id not preent on Active Jobs sheet");
  }else{
    activeJobSheet.getRange(jobrow,15).setValue(input);
  }
}

然后我在这个脚本中加入了一些代码,如果有些日期接近今天的日期,它应该向人们发送一些电子邮件。由于授权要求,该代码存在一些问题,因此我将其移入其自己的单独功能并返回到上面发布的原始脚本。现在我遇到的问题是,虽然如果从脚本编辑器运行,从电子表格中的绘图按钮手动运行,或者通过我在&#34;当前项目触发器中设置的编辑触发器运行,此脚本工作正常。 #34;如果脚本由onEdit()函数名称触发,它将不会执行整个脚本。它会在第一位复制单元格的内容而不是第二位,使用大小写切换。

显而易见的解决方法是从&#34;当前项目触发器&#34;设置触发器。但是这个onEdit检测需要适用于编辑此工作表的团队中的任何人。如果我这样设置它会对我有用,但我的团队中没有其他人。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

通过函数名onEdit()设置触发器证明很棘手我写了这段代码并将其附加到工作表中的绘图中。然后指示所有用户单击它以设置触发器。这解决了问题,触发器现在工作正常。

function triggerSetUp(){
  var sheet = SpreadsheetApp.getActive();
 ScriptApp.newTrigger("enforcer").forSpreadsheet(sheet).onEdit().create();
}