在Google Apps脚本中调用函数(调用)中的函数

时间:2016-08-09 08:32:09

标签: javascript google-apps-script

我正在自动化Google Apps脚本中的某些流程。

我创建了一些目前彼此独立的功能。 但是现在,我想重新组合它们,所以它们是在“主”功能中触发的。

function master(){
     // code that imports data from a form and organises it
     runMeAfterMaster();
  }


function runMeAfterMaster(){
    // code that should run after master
}

两者都在同一个脚本文件中,两者都独立工作,但我似乎无法“调用”或调用主要文件中的其他功能。

请帮忙!

3 个答案:

答案 0 :(得分:1)

当我的函数名称以小写字母开头时,我遇到了类似的问题。

我得到的错误是: 类型错误:randomNumber 不是函数

我的代码:

/*
goal of the script is to highlight project rotators
*/

function HightlightProject() 
{

  // get random number
  var randomNumber =  randomNumber();


}

function randomNumber()
{
  // get cell from certain spread sheet
  var cell = SpreadsheetApp.getActiveSpreadsheet().getRange("fundation rotator!B7");
  
  // random number
  var number = Math.floor(Math.random() * 100);
  
  // set random number
  cell.setValue(number);
}

如果我将 randomNumber 大写为 RandomNumber,则函数名称变为粉红色,并且可以正常工作。

/*
goal of the script is to highlight project rotators
*/

function HightlightProject() 
{

  // get random number
  var randomNumber =  RandomNumber();


}

function RandomNumber()
{
  // get cell from certain spread sheet
  var cell = SpreadsheetApp.getActiveSpreadsheet().getRange("fundation rotator!B7");
  
  // random number
  var number = Math.floor(Math.random() * 100);
  
  // set random number
  cell.setValue(number);
}

答案 1 :(得分:0)

你写的是没关系runMeAfterMaster看起来被调用,我想你的问题在别处你用Logger.log装饰你的功能吗?
例如:

function master(){
     // code that imports data from a form and organises it
     Logger.log("I'm in master now");
     runMeAfterMaster();
     Logger.log("still in master but after calling runMeAfterMaster");
  }


function runMeAfterMaster(){
    Logger.log("I'm in runMeAfterMaster now");
    // code that should run after master

    Logger.log("getting out of runMeAfterMaster");
}

如果你不能使用Logger.log,因为该功能是自动触发的(你无法查看日志)yoo可以用你自己的登录函数替换它,它在电子表格中写下所有内容:

function logit(message) {
  SpreadsheetApp.openById("SPREADSHEET_ID").getActiveSheet().appendRow([new Date(),message]);
}
然后它会变成:

function master(){
     // code that imports data from a form and organises it
     logit("I'm in master now");
     runMeAfterMaster();
     logit("still in master but after calling runMeAfterMaster");
  }


function runMeAfterMaster(){
    logit("I'm in runMeAfterMaster now");
    // code that should run after master

    logit("getting out of runMeAfterMaster");
}

答案 2 :(得分:0)

哈罗德的提示让我走上了正确的道路。测试的路径。

我将代码放在代码编辑器中(在我的案例中是Brackets)并通过JSLint运行它。找出任何错误。

没有错误,即使函数名末尾的花括号为红色。事实证明,谷歌应用程序中有超过100行代码,而花括号变为红色。在100行以下,你很高兴!

不幸的是我无法调试。

所以我决定让它更简单,并在新的内部调用这两个函数。那不起作用......我仍然不理会为什么。

 function MasterOfAll(){
    Master();
    runAfterMaster();
 }

我做的第二件事就是简单地将每个函数的代码重新组合成一个新函数并调用它。这很有用。

function MasterOfAll(){
    //Code from the Master function.
    //Code from the runAfterMasterFunction.
}

毋庸置疑,我不是这个解决方案的忠实粉丝(不清楚,凌乱),但它确实有效!