TypeError:在Google脚本中使用多个脚本(库)时方法为空

TypeError: Method quot;getRangequot; of null when using multiple scripts (Libraries) in Google scripts(TypeError:在Google脚本中使用多个脚本(库)时方法为空)

本文介绍了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",它可以正常工作。

我的问题是:

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

  2. 这个问题有解决方案吗?还是我做不到?

我尝试在.gs文件中使用不同的名称,但不起作用。 我还尝试删除文件Constants.gs,并将所有变量都放在Code.gs中。

推荐答案

来自操作员的问题

我的问题是:

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

是的,此行为"正常"。

  1. 这个问题有解决方案吗?还是我做不到?

解决方案有很多种。Google Apps脚本项目的一些经验法则,可以帮助您决定如何继续:

  1. 减少全局作用域中的变量声明,并在全局作用域中声明变量时,将其限制为赋值。
  2. 仅对库使用独立项目,但如果确实需要将绑定项目用作库,请不要在库函数上使用"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?

这篇关于TypeError:在Google脚本中使用多个脚本(库)时方法为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:TypeError:在Google脚本中使用多个脚本(库)时方法为空

基础教程推荐