全局变量值在多个函数中不可用

时间:2016-07-27 17:06:35

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

使用Google Apps脚本我正在尝试创建一个可用于多种功能的全局变量(例如数组),但我似乎无法在任何地方找到答案,我需要它才能让我的Google电子表格工作

代码:

var infoSheetArray = null;

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Custom Menu')
      .addItem('Fetch Info', 'grabInfo')
      .addItem('Run Program', 'itemSetup')
      .addToUi();
}

function grabInfo() {
  var infoSheet = SpreadsheetApp.openByUrl('....');
  infoSheetArray = infoSheet.getSheetValues(1, 1, infoSheet.getLastRow(), 10);
}    

1 个答案:

答案 0 :(得分:4)

在您的代码中,infoSheetArray是一个具有全局范围的变量,这意味着程序中的所有代码都可以访问它。什么不是很明显,你的程序运行多次&在不同的"机器",以及为什么infoSheetArray可能会重置。

脚本的每个单独执行都在一个新的执行实例中完成,每个执行实例都有自己的"全局"。例如,在示例代码段中,onOpen()是在Web编辑器中打开电子表格时独立调用的自动触发器函数。您还有两个其他功能,grabInfo()itemSetup()(未显示),可通过用户菜单扩展程序独立调用

当独立调用这三个函数中的任何一个时,将为其创建一个执行实例,加载您的程序,然后开始执行。首先评估所有全局语句(例如var infoSheetArray = null;),然后是特定触发的函数。对全局变量所做的任何更改将仅在发生更改的执行实例中保留,并且仅在需要该实例时才持续。一旦函数完成,实例就会被吹掉。

如果需要在执行实例之间保留值,则需要使用某种存储方法,例如Properties ServiceExternal Database