谷歌脚本中的函数

Nav*_*eet 4 javascript google-apps-script

我尝试缩短gs的基本代码。

function quantityAnalysis (){
  var subscription = magicSheet("dataRaw","Subscription");

  var idCol = msCol(subscription,"Subscription Id");
  var xlCol = msCol(subscription,"XL");
  var goCol = msGoCol(idCol,xlCol);
  var lastRow = msLastRow(subscription);

  var dataToFilter = subscription
  .getRange(1,idCol,lastRow,goCol)
  .getValues();
}
Run Code Online (Sandbox Code Playgroud)

**在第二个文件中**

function magicSheet (ssName,sheet="full"){
  //return sheet
    let id = sMagicSearch("id",ssName);
    if(sheet=="full"){
      return SpreadsheetApp.openById(id);
    }else{
      return SpreadsheetApp.openById(id).getSheetByName(sheet);
    }
  //end return sheet
}
Run Code Online (Sandbox Code Playgroud)

在我这样做之前它一直在工作。

var subscription = magicSheet("dataRaw","Subscription");

function quantityAnalysis (){
  var idCol = msCol(subscription,"Subscription Id");
  var xlCol = msCol(subscription,"XL");
  var goCol = msGoCol(idCol,xlCol);
}
Run Code Online (Sandbox Code Playgroud)

错误:magicSheet 未定义。

还有一件事要告诉:订阅函数在另一个函数中用于将值打印到工作表;

(从另一个文件调用函数的函数是有效的,但将同一函数调用为全局变量是无效的)。

Iam*_*hus 5

问题:

全局语句(例如声明全局变量、在任何函数声明之外调用函数)在您决定执行的函数之前执行。它们似乎也是按顺序执行的,一个脚本文件一个接着一个。

在这种情况下,var subscription = magicSheet("dataRaw","Subscription");位于第一个文件中的 会在magicSheet声明之前执行(在第二个文件中)。因此,它没有找到这个功能。

解决方案:

要么像您所做的那样将全局语句(调用magicSheet)包装在函数内,要么使用类似以下内容的内容:

function getSubscription() {
  return magicSheet("dataRaw","Subscription");
}
Run Code Online (Sandbox Code Playgroud)

或者更改文件的顺序,将第二个文件移到第一个文件的顶部(在新的 IDE 中,单击第二个文件的垂直三个点,然后单击Move file up.

无论如何,我认为使用全局语句引用其他文件中的对象不是一个好习惯,因此我只是将该语句包装在函数中。