javascript - 谷歌脚本中的函数

标签 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();
}
**在第二个文件中**
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
}
在我这样做之前它一直有效。
var subscription = magicSheet("dataRaw","Subscription");

function quantityAnalysis (){
  var idCol = msCol(subscription,"Subscription Id");
  var xlCol = msCol(subscription,"XL");
  var goCol = msGoCol(idCol,xlCol);
}
错误:magicSheet 未定义。
还有一件事要说:
订阅功能用于在另一个功能中将值打印到工作表;
(从另一个文件调用函数的函数正在工作,
但是调用同一个作为全局变量是行不通的)。

最佳答案

问题:
全局语句(例如,声明全局变量、在任何函数声明之外调用函数)在您决定执行的函数之前执行。它们似乎也按顺序执行,一个脚本文件一个接一个。
在这种情况下,var subscription = magicSheet("dataRaw","Subscription"); ,在第一个文件中,在 magicSheet 之前执行被声明(在第二个文件中)。因此,它没有找到此功能。
解决方案:
就像您正在做的那样,将您的全局语句(调用 magicSheet )包装在一个函数中,或者使用类似的东西:

function getSubscription() {
  return magicSheet("dataRaw","Subscription");
}
或者更改文件的顺序,将第二个文件移到第一个文件的顶部(在新的 IDE 中,单击第二个文件的垂直三个点,然后单击 Move file up
无论如何,我认为拥有引用其他文件中的对象的全局语句不是一个好习惯,所以我只是将该语句包装在一个函数中。

关于javascript - 谷歌脚本中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67681954/

相关文章:

google-apps-script - 根据条件格式化货币

authentication - 如何让谷歌网站页面显示特定于当前登录用户的内容

javascript - 将数据传递给 jQuery 事件处理程序

javascript - 如何在指令中将元素推送到数组 - AngularJS

google-apps-script - onOpen 触发器未在 Google 表单上激活

google-apps-script - 如何通过 urlfetchapp 在有效负载中发送带有数组的发布请求

google-apps-script - 将 Google Apps 脚本 URL 正确嵌入到 Google 网站中

javascript - 模拟 jquery 或 javascript 中的 Enter 键

javascript - ES6/React "this"关键字与 ajax 从服务器获取数据(教程)

php - 将 PHP 变量放入 javascript 文件中