【问题标题】:TypeError: Method "getRange" of null when using multiple scripts (Libraries) in Google scriptsTypeError:在 Google 脚本中使用多个脚本(库)时,方法“getRange”为 null
【发布时间】: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”,它可以正常工作。

我的问题是:

  1. 这是正常行为吗?为什么当我运行代码时,它会尝试从 Dashboard1 中的 Constants.gs 初始化变量,因为它们存在于 Dashboard2 中?

  2. 有解决办法吗?还是只是我做不到?

我尝试在 .gs 文件中使用不同的名称,但没有成功。 还尝试删除文件 Constants.gs 并在 Code.gs 中包含所有变量。

【问题讨论】:

    标签: javascript google-apps-script google-sheets global-variables libraries


    【解决方案1】:

    来自 OP 的问题

    我的问题是:

    1. 这是正常行为吗?为什么当我运行代码时,它会尝试从 Dashboard1 中的 Constants.gs 初始化变量,因为它们存在于 Dashboard2 中?

    是的,这种行为是“正常的”。

    1. 有解决方案吗?还是只是我做不到?

    有很多解决方案。 Google Apps 脚本项目的一些“拇指”规则可以帮助您决定如何进行:

    1. 减少全局范围内的变量声明,当您在全局范围内声明变量时,将它们限制为分配文字。
    2. 仅对库使用独立项目,但如果您确实需要将有界项目用作库,请不要在库函数上使用“getActive”方法,而是将“活动”对象作为参数添加到需要它们的库函数。

    相关

    【讨论】:

    • 谢谢鲁本!!现在我懂了。我需要阅读大量 Google Scripts 的工作原理。
    猜你喜欢
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多