【发布时间】:2019-08-16 22:19:31
【问题描述】:
我在 Google 表格中使用库时遇到了一个严重问题。
我有两个电子表格:Dashboard1 和 Dashboard2。在这两个电子表格中,我都有多个脚本和触发器。
有一个特定的触发器在 Dashboard2 中的事件 OnEdit 上触发。代码如下:
仪表板2
代码.gs
function onEdit(e){
Dashboard1.updateReferral(e.oldValue, e.value);
}
仪表板1
代码.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();
我想要做的是当有人在 Dashboard2 中编辑时,它会更新 Dashboard1 中的一行。
当我尝试触发事件时,它会抛出错误
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 中包含所有变量。
【问题讨论】:
标签: javascript google-apps-script google-sheets global-variables libraries