从onEdit()触发器调用函数不起作用

时间:2014-02-27 16:15:56

标签: triggers google-apps-script

我想在编辑列的一个单元格时运行一个更新某些值的函数。触发器的这一行效果很好:dataCell0.setValue(today_date(new Date())[2]);。但另一条线updatePercent();却没有。但是如果我从基于时间的触发器(在参考资料中)中调用此updatePercent()函数,它就可以正常工作。这个updatePercent()电话出了什么问题?

function onEdit(){
  var s = SpreadsheetApp.getActiveSheet();

  if( ( s.getName() == "mySheet1" ) || (s.getName() == "mySheet2") ) { //checks that we're on the correct sheet
    var r = s.getActiveCell();   
    if( s.getRange(1, r.getColumn()).getValue() == "PORCENT_TIME") { // If you type a porcent, it adds its date.
      var dataCell0 = r.offset(0, 1); 
        dataCell0.setValue(today_date(new Date())[2]);
        updatePercent();    
    } 
  }
}

这里是updatePercent函数代码:

/**
 * A function to update percent values accoding to input date.  
 **/
function updatePercent() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var column = getColumnNrByName(sheet, "PORCENT_TIME");
  var input = sheet.getRange(2, column+1, sheet.getLastRow(), 4).getValues();
  var output = [];
   for (var i = 0; i < input.length; i++) {      
     var fulfilledPercent = input[i][0];
     Logger.log("fulfilledPercent = " + fulfilledPercent);
     var finalDate = input[i][3]; 
     Logger.log("finalDate = " + input[i][3]);     
     if ( (typeof fulfilledPercent == "number") && (finalDate instanceof Date) ) {
      var inputDate = input[i][1]; // Date when input was added.
      var restPorcentPen = 100 - fulfilledPercent;
      var restantDays = dataDiff(inputDate, finalDate);
      var percentDay = restPorcentPen/restantDays;
      Logger.log("percentDay = " + percentDay);       
      var passedTime = dataDiff(inputDate, new Date());
      Logger.log("passedTime = " + passedTime);       
      var passedPorcent = passedTime * percentDay; // How much percent this passed time is?
      Logger.log("passedPorcent = " + passedPorcent);
      var newPorcent = (fulfilledPercent + passedPorcent);
      newPorcent = Math.round(newPorcent * 100) / 100; 
      Logger.log("newPorcent = " + newPorcent);
      var newInputDate = hoje_data(new Date())[2]; // Now update the new input date
//      newPorcent = newPorcent.toFixed(2);
      output.push([newPorcent, newInputDate]);
      sheet.getRange(2, column+1, output.length, 2).setValues(output);
       Logger.log(" ");       
      var column25Dec = getColumnNrByName(sheet, "PORCENT_25DEZ");
      var passedTimeSince25Dec = dataDiff(new Date(2013,11,25), new Date()); // Months: January is 0;
      var decPercent = (newPorcent - (passedTimeSince25Dec * percentDay)); // .toFixed(2).replace(".", ",");
      decPercent = Math.round(decPercent * 100) / 100;      
      // if (sheet.getRange(output.length+1, column25Dec+1).getValues() == ''){
           sheet.getRange(output.length+1, column25Dec+1).setValue(decPercent );
//         }
      var remainingYears = dataDiffYears(new Date(), finalDate); 
      sheet.getRange(output.length+1, column).setValue(remainingYears);
     }

     else {
       newPorcent = "Put a final date"
       output.push([newPorcent, inputDate]);
       sheet.getRange(2, column+1, output.length, 2).setValues(output);       
     }
     if (finalDate instanceof Date){
        var remainingYears = dataDiffYears(new Date(), finalDate);
   //     Logger.log("remainingYears = " + remainingYears);
     }
     else {
         remainingYears = "insert a valid date";
     }         
        sheet.getRange(output.length+1, column).setValue(remainingYears);    
   }
}

2 个答案:

答案 0 :(得分:0)

我猜你正在使用新的gSheets。检查它是否可以在旧式工作表中使用。新工作表'onEdit触发器存在问题,尤其是getActive。

答案 1 :(得分:0)

我的问题出现在updatePercent()功能区。谢谢你们,伙计们!