Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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
Function 从同一脚本文件中调用另一个函数_Function_Google Apps Script - Fatal编程技术网

Function 从同一脚本文件中调用另一个函数

Function 从同一脚本文件中调用另一个函数,function,google-apps-script,Function,Google Apps Script,在这篇文章中,Serge回答说:“当然,您可以在项目中使用来自不同脚本文件的任何函数。” 这样做的协议是什么 我想在三个不同的脚本中使用一个函数。它非常密集,我正在不断地改进它,所以我不想在函数之间复制和粘贴所有代码。这些文件都在同一个项目中。Serge在这个链接上的回答是我能确认的最接近的回答,但它没有给出协议 更具体地说,我有一个函数,可以删除一个文件,获取一个模板,复制它,重命名它,并用电子表格中的当前数据填充它。我想在几个在不同时间向不同的人发送不同消息的电子邮件脚本中运行该功能 谢谢

在这篇文章中,Serge回答说:“当然,您可以在项目中使用来自不同脚本文件的任何函数。”

这样做的协议是什么

我想在三个不同的脚本中使用一个函数。它非常密集,我正在不断地改进它,所以我不想在函数之间复制和粘贴所有代码。这些文件都在同一个项目中。Serge在这个链接上的回答是我能确认的最接近的回答,但它没有给出协议

更具体地说,我有一个函数,可以删除一个文件,获取一个模板,复制它,重命名它,并用电子表格中的当前数据填充它。我想在几个在不同时间向不同的人发送不同消息的电子邮件脚本中运行该功能

谢谢

MOGSDAD响应后更新:

我有5个.gs文件,都在同一个脚本项目中(如示例中显示的两个.gs文件)。一个文件创建一个新文件(newFile.gs),其他文件用于在不同时间通过电子邮件发送给不同的受众。其中一个.gs文件的示例如下所示:

function emailNewDoc() {

//Here's where I want to run the script newFile.gs so that the new doc is created before the mail goes out

var message = "Hi,";
message += '<a href='+url+'>Here's the new document</a>' //url is defined in newDoc.gs after the new document is created

var subject = "The updated document"
var recipients = "xyz@xyz.com"

MailApp.sendEmail(recipients, subject, message);

}
正如你们所看到的,我定义了URL,这是我想引入另一个函数的变量,这样我就可以通过电子邮件将其发送出去


再次感谢!

Serge的回复是关于脚本项目中的脚本文件。脚本项目可以有多个文件。以下是创建它们的方法:

在本例中,我们有两个“gs”文件,“代码”和“实用程序”:

项目中的任何函数都可以通过调用Utilities.gs中的
getHtmlTable()
函数来调用它。不需要特殊协议


使用其他脚本中的函数的另一种主要方法是创建和附加库。一旦理解了这些库,就不会有太多了。从文档开始。

我想我理解了您提出的问题。下面是一个示例项目,它的函数用于设置我的解释:

scriptOne.gs:

  • functional()
  • 函数b()
  • 函数c()
脚本2.gs:

  • 函数d()
  • 函数e()
  • 函数f()
在scriptOne.gs中,我只需执行以下操作即可调用functionD():

functionA() {
  functionD();
}

functionB() {
}

functionC() {
}
我知道这看起来非常简单,但我用这个简单的术语来调用其他项目的函数。这对你不起作用吗?如果你能提供一个清晰的例子来说明你想要实现的目标,我可以尝试给你一个更好的答案


如果您试图在一行中运行scriptTwo.gs中的所有函数,那么我将在scripTwo.gs中创建一个调用scriptTwo.gs文件中所有函数的
runScriptTwo()
函数。然后您可以在我的第一个代码中调用
runScriptTwo()
,而不是调用
functionD()
。这有意义吗?

这只是澄清你最后一点的另一个答案:

以下是调用其他函数的代码:

function emailNewDoc() {
var url = newFile();  // this is calling the other function and gets the value you need from it  
var message = "Hi,";
message += '<a href='+url+'>Here's the new document</a>' //url is defined in newDoc.gs after the new document is created

var subject = "The updated document"
var recipients = "xyz@xyz.com"

MailApp.sendEmail(recipients, subject, 'please read html body',{htmlBody : message} );

}
function newFile() {
  var docTemplate = "[insert template doc key here]"; //this one uses the document key, not   the file name like mine did
  var copy = DocsList.getFileById(docTemplate).makeCopy("my DOCUMENT");
  var url = copy.getUrl();
  var copyId = copy.getId();
  var copyDoc = DocumentApp.openById(copyId);
  var body = copyDoc.getActiveSection();
  body.replaceText('{date}', Utilities.formatDate(new   Date(sheet.getRange('A1').getValues()), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "MMM dd"));
  return url;// this returns the value you need in the other function
}

感谢Mogsdad,我根据您的评论更新了我的问题。我仍然不知道键入什么代码来调用同一脚本文件中的.gs文件。文件名并不重要,您只需要使用此脚本文件中的函数名。Mogsdad,Serge,谢谢你们。我现在可以让它工作了。但是,您怎么办esn不工作是URL部分(请参见我的主要问题)。是否可以引用我在其他函数中创建的变量URL?您可以将URL作为返回值添加到other.gs中的函数中。是否可以使用该函数代码编辑您的问题?(以便我可以编写一个示例)Serge,谢谢。我更新了我的问题以包含您要求的代码。是的,对不起,我离开了一段时间…谢谢cvnntg。是的,我是一个新手,所以我不知道如何写出来。现在可以了!但是,URL部分不起作用(请参阅我的主要问题)。例如,在你的function d()中假设您创建了一个新文档并定义了一个变量url。是否可以在函数(a)中使用该变量,比如在电子邮件正文中发送url?您好。很抱歉,我花了这么长时间才做出响应。我相信如果您在functionD()中返回url,这是可能的。但是您不能从function()中的functionD()调用相同的变量因为一旦程序退出functionD(),该变量将消失。谢谢Serge。所以您所做的只是在脚本中添加返回url作为最后一个命令?我这样做了…现在它允许函数一直运行(即,它发送带有链接的电子邮件)…但电子邮件中的链接未定义(即,当您将鼠标悬停在其上时,它会显示“未定义”,并且没有http链接).为了清楚起见,我在newFile中定义了url,然后在我的emailNewDoc脚本中,我将链接发送为“你不是真的在找图书馆吗?读一下,我想这就是你想要的。谢谢Zig。不,我认为图书馆没有必要。我今天广泛地阅读了它们。主要问题已经解决了(我现在可以运行另一个.gs文件中的函数),但我希望能够提取作为另一个.gs文件中函数的一部分创建的变量(在本例中是URL)@user3063164:我刚刚在一个测试脚本中复制/粘贴了你的代码,它工作了…我得到了与url的链接,只是它的格式不符合要求…这是纯文本,不是html,所以新文档中还有,你的代码在注释中有一个拼写错误…应该是“url”,而不是“newFile.url”,只取变量名(url)希望它足够清楚…仍然无法让它工作:(回顾一下我所得到的基本知识:在“外部”函数(newFile)中,我定义url(正在工作),然后我放入返回url命令。然后在当前函数中,我放入url=newFile()命令,在电子邮件正文中只放入url(甚至不是href,只是通过url查看返回的内容),但我什么也没有得到。
function newFile() {
  var docTemplate = "[insert template doc key here]"; //this one uses the document key, not   the file name like mine did
  var copy = DocsList.getFileById(docTemplate).makeCopy("my DOCUMENT");
  var url = copy.getUrl();
  var copyId = copy.getId();
  var copyDoc = DocumentApp.openById(copyId);
  var body = copyDoc.getActiveSection();
  body.replaceText('{date}', Utilities.formatDate(new   Date(sheet.getRange('A1').getValues()), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "MMM dd"));
  return url;// this returns the value you need in the other function
}