这个问题是关于基于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...
答案 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');