函数在被调用之前发出错误

时间:2016-01-21 16:37:56

标签: google-apps-script google-sheets

这个问题是关于基于JavaScript的Google Apps脚本,所以已经提供了JavaScript标记,希望能够吸引更多的关注者。不确定我的问题是否与环境有关。

这是一个小脚本:

:lists.seq(start, length*increment, increment)

我实际上没有调用该函数,直到for循环进一步向下。但是,当我尝试保存和/或运行脚本时,我收到一条错误消息:

  

TypeError:无法调用null的方法“getRange”。 (第6行,档案   “代码”)

这涉及从function onEdit() { // create the campaign portfolio lookup function function channelLookup(month_num) { var lookup_formula = '=ARRAYFORMULA(if($A$16:$A="",,iferror(VLOOKUP($C$16:$C,lookups!$E$3:$F$100,2,false),"not recognized in lookup")))'; var the_cell = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('starts ' + month_num + ' month' ).getRange('E16'); var cell_content = the_cell.getValues(); if(cell_content == "") { the_cell.setFormula(lookup_formula); } else { Logger.log('the_cell is not empty'); } } // loop through the 13 reports for ( var i=0; i<14; i++ ) { channelLookup(i); } }

开始的行

由于我只是在这个阶段构建函数而没有实际调用它,为什么我收到此错误?变量the_cell尚未定义,因为我还没有调用函数?

评论后的替代结构

var the_cell = SpreadsheetApp...

1 个答案:

答案 0 :(得分:2)

字符串连接可能不是您认为的那样。该错误清楚地表明getSheetByName()的结果是null

只是为了说服自己,而不是:

var the_cell = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('starts ' + month_num + ' month' ).getRange('E16');

分解:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetname = 'starts ' + month_num + ' month';
Logger.log( sheetname );
var sheet = ss.getSheetByName(sheetname);
if (!sheet) {
  throw new Error( "No such sheet: "+sheetname );
}
var the_cell = sheet.getRange('E16');