Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script Google应用程序脚本:使用各种脚本时未定义的变量或函数(依赖项)_Google Apps Script - Fatal编程技术网

Google apps script Google应用程序脚本:使用各种脚本时未定义的变量或函数(依赖项)

Google apps script Google应用程序脚本:使用各种脚本时未定义的变量或函数(依赖项),google-apps-script,Google Apps Script,我试图理解这一点,但我不能,我相信你们中的一些人经历了这一点。 我有一个通用的Code.gs文件,从中调用函数 公共链接以查看我的代码(如果需要): 有一个函数(updateInvoice())我从code.gs调用 此函数位于另一个脚本中:工厂/invoice.gs 此函数还使用从其他脚本生成的数据:factory/keys.gs 真正奇怪的是,我调用这个函数时得到了“未定义” 如果我将所有脚本中的所有代码放在同一个脚本code.gs中,它就像一个符咒。 所以我想知道的是:脚本与其他脚本之间的

我试图理解这一点,但我不能,我相信你们中的一些人经历了这一点。 我有一个通用的Code.gs文件,从中调用函数

公共链接以查看我的代码(如果需要):

  • 有一个函数(
    updateInvoice()
    )我从code.gs调用
  • 此函数位于另一个脚本中:工厂/invoice.gs
  • 此函数还使用从其他脚本生成的数据:factory/keys.gs
  • 真正奇怪的是,我调用这个函数时得到了“未定义”

    如果我将所有脚本中的所有代码放在同一个脚本code.gs中,它就像一个符咒。 所以我想知道的是:脚本与其他脚本之间的关系如何?我以为是自动的

    到目前为止,我有一个非常有趣的经历:

  • 我创建了一个新项目,并在code.gs中添加了代码,然后添加了工厂/keys.gs,最后添加了工厂/invoice.gs:它成功了
  • 我删除了代码.gs
  • 我创建了一个新的代码.gs脚本并粘贴了以前删除的代码:但它不起作用 结论:关于剧本的“创作顺序”,我无法解释

    这是一张照片拼贴,向您展示我拥有的:

    图像拼贴

  • 测试项目中的错误与
    ss
    var有关
  • 实际项目(您有权访问)中的错误与
    keyVal()
    函数有关
  • 两者都与脚本之间相同的依赖性相关
  • 提前感谢您的帮助

    托马斯

    关于脚本的“创建顺序”,我无法解释

    使用全局变量时,文件的顺序很重要。正如在报告中所写

    文件的解析顺序与它们在应用程序脚本编辑器中的显示顺序相同(即,禁用“查看>按字母顺序排序文件”时)。当在不同的文件中进行全局变量分配时,文件的函数可能不可用。这种安排与浏览器在一个HTML文件中处理多个标记的方式相同

    正如文件中所警告的那样

    警告:依靠特定的文件解析顺序来避免此问题不是最佳做法。如果复制、删除、重命名或以其他方式重新排列脚本文件,则脚本文件解析的顺序可能会更改如果可能,最好删除函数调用的所有全局变量依赖关系

    在这种情况下,您可以根据需要修改代码

    文件#1:

    文件#2


    通过点击答案左边的复选框来接受答案。
    var ss;
    
    function getss(){
      if (ss == undefined){
        ss = SpreadsheetApp.openById(/*ID HERE*/);
      }
      return ss;
    }
    
    function updateInvoice(){
      getss();
      updateInvoiceData();
    }