TypeError:在Google脚本中使用多个脚本(库)时方法为空
在Google Sheet中使用库时遇到严重问题。
我有两个电子表格:仪表板1和仪表板2。在这两个电子表格中,我都有多个脚本和触发器。
有一个特定的触发器在Dashboard2中的Event OnEDIT上触发。代码如下:
仪表板2
Code.gs
function onEdit(e){
Dashboard1.updateReferral(e.oldValue, e.value);
}
仪表板1
Code.gs
function updateReferral(evaluatedEmail, newReferral){
var employee = returnEmployeeRow(evaluatedEmail);
PAYROLL_SHEET.getRange(REFERRAL_COLUMN + employee[2]).setValue(newReferral);
}
Constants.gs
var SHEET_CATEGORIES = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Categorias");
var RANGE_CATEGORIES = SHEET_CATEGORIES.getRange("A2:G");
var CATEGORIES = RANGE_CATEGORIES.getValues();
我要做的是,当有人在仪表板2中进行编辑时,它会更新仪表板1中的一行。
当我尝试触发事件时,它抛出错误
TypeError: Cannot call method "getRange" of null. (line 2, file "Constants", project "XXXXXX")
我发现这个错误是因为Dashboard2中没有工作表"Categorias"。 如果我在Dashboard2中创建一个工作表"Categorias",它可以正常工作。
我的问题是:
这是正常行为吗?为什么当我运行代码时,它试图从Dashboard1中的Constants.gs初始化变量,因为它们存在于Dashboard2中?
这个问题有解决方案吗?还是我做不到?
我尝试在.gs文件中使用不同的名称,但不起作用。 我还尝试删除文件Constants.gs,并将所有变量都放在Code.gs中。
解决方案
来自操作员的问题
我的问题是:
- 这是正常行为吗?为什么当我运行代码时,它试图从Dashboard1中的Constants.gs初始化变量,因为它们存在于Dashboard2中?
是的,此行为"正常"。
- 这个问题有解决方案吗?还是我做不到?
解决方案有很多种。Google Apps脚本项目的一些经验法则,可以帮助您决定如何继续:
- 减少全局作用域中的变量声明,并在全局作用域中声明变量时,将其限制为赋值。
- 仅对库使用独立项目,但如果确实需要将绑定项目用作库,请不要在库函数上使用"getActive"方法,而是将"active"对象作为参数添加到需要它们的库函数上。
相关
- GAS: Problems in using global variables in functions
- Variable scope between spreadsheet script and script library
- Calling variables at global scope and comparing it in Google apps script
- Using Global vars in GAS, is it advisable? are there any downsides?
相关文章