【问题标题】:Google apps script store activeDocument in global variableGoogle 应用程序脚本将 activeDocument 存储在全局变量中
【发布时间】:2020-05-19 19:20:52
【问题描述】:

我知道谷歌应用脚​​本中的全局变量存在一些问题(或者说,与“正常”代码不同的工作方式):

Issues with global variables in Google App Script

How to define global variable in Google Apps Script

Global variables in Google Script (spreadsheet)

还有很多例子,但问题是,在Google Apps script documentation中,他们提到在onOpen函数中,传递了一个事件对象,其中包含一个源属性,它链接到当前文档:

source 一个 Document 对象,代表 Google Docs 文件, 脚本已绑定。

文档

现在,如果您无论如何都必须致电DocumentApp.getActiveDocument(),那么让我们访问此来源的意义何在?我尝试在代码顶部创建一个全局变量:

变量文档;

然后在onOpen(e) 函数中,将其设置为:doc = e.source,在该函数中工作正常,但是当我想在客户端调用的另一个函数中使用它时,“全局”变量“doc”是undefined 或 null,那么我该如何设置它,这样我就不必在每次客户端单击某些东西时调用 DocumentApp.getActiveDocument()?因为它需要大约 50-70 毫秒,尽管它非常快,但它可能会更快......有什么解决方法吗?

基本上:如何将DocumentApp.getActiveDocument() 存储在可重用变量中?如果我不能,为什么onOpen 中的事件对象中提供了源属性? (事实上​​它意味着它可能将它存储在某个地方)

【问题讨论】:

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


    【解决方案1】:

    我认为提供e.source 只是为了让您不必在触发器中调用DocumentApp.getActiveDocument(),正如您所指出的那样。这很有用,因为您可能想要操作文档,因此提供它意味着您不需要进行额外的调用。

    拥有一个全局var doc = e.source 将不起作用,因为每次运行该脚本都会重新实例化它。因此,一旦您的 onOpen() 完成运行,您的任何变量值都不会持续存在。

    这行不通,因为doc 的值将在onOpen() 终止后未定义。

    var doc;
    
    function onOpen(e) {
      doc = e.source;
    }
    
    function foo() {
      DocumentApp.getUi().alert(doc.getName());
    }
    

    这将起作用,因为它与调用onOpen() 时的脚本实例相同,这意味着doc 的值定义。

    var doc;
    
    function onOpen(e) {
      doc = e.source;
      foo();
    }
    
    function foo() {
      DocumentApp.getUi().alert(doc.getName());
    }
    

    最终,让doc 在全球范围内工作的最佳方式是将DocumentApp.getActiveDocument() 保存到其中。这意味着DocumentApp.getActiveDocument() 将在您执行脚本时被调用每次,无论您是否需要该文档。因此,请考虑您是否真的需要在全球范围内使用它。

    var doc = DocumentApp.getActiveDocument();
    
    function onOpen(e) {
      // do something
    }
    
    function foo() {
      DocumentApp.getUi().alert(doc.getName());
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-05
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      相关资源
      最近更新 更多