在这篇文章中,Serge回复说:"但是当然,你可以使用项目内不同脚本文件中的任何函数"。
这样做的协议是什么?
我有一个功能,我想在三个不同的脚本中使用。它非常密集,我不断改进它,所以我不想在函数之间复制和粘贴所有代码。这些文件都在同一个项目中。 Serge在此链接上的回复是我可以确认的最接近的回复,但它没有给出协议。
How to make a call from one Google Apps Script to a function in another?
更具体地说,我有一个删除文件,抓取模板,复制,重命名,并用电子表格中的当前数据填充的功能。我希望在几个电子邮件脚本中运行该功能,这些脚本会在不同时间向不同的人发送不同的消息。
谢谢!
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);
}
正如您所看到的,我不知道在第二行输入什么内容以使newFile.gs作为emailNewDoc.gs的一部分运行。抱歉迂腐。我是一个新手,但是如果我能弄清楚基础知识,那么认为谷歌脚本会永远改变我的生活。
***编辑后的评论
Serge,这里是原始.gs文件中的代码
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"));
}
正如您所看到的,我定义了URL,这是我想要引入另一个函数的变量,因此我可以通过电子邮件发送它。
再次感谢!
答案 0 :(得分:2)
我想我理解你提出的问题。这是一个示例项目,其功能用于设置我的解释:
scriptOne.gs:
scriptTwo.gs:
在scriptOne.gs中,我可以通过这样做来调用functionD():
functionA() {
functionD();
}
functionB() {
}
functionC() {
}
我知道它看起来非常简单,但我使用这个简单的命名法来调用其他项目中的函数。这不适合你吗?如果你能提供一个明确的例子,你可以尝试给你一个更好的答案。
如果您尝试在一行中运行scriptTwo.gs中的所有函数,那么我将在scripTwo.gs中创建一个runScriptTwo()
函数,该函数调用scriptTwo.gs文件中的所有函数。然后,您可以在我的第一个代码中调用runScriptTwo()
,而不是调用functionD()
。这有意义吗?
答案 1 :(得分:1)
另一个答案是澄清你的最后一点:
以下是调用其他函数的代码:
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} );
}
并在另一个函数中(最终在同一项目中的另一个.gs文件中更改函数的结尾):
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
}
答案 2 :(得分:0)
Serge的回复是关于脚本项目中的脚本文件。脚本项目可以有多个文件。以下是创建它们的方法:
在这个例子中,我们有两个“gs”文件,“Code”和“Utilities”:
项目中的任何函数都可以通过调用它来调用Utilities.gs中的getHtmlTable()
函数。没有特殊的协议要求。
您可以使用其他脚本中的函数的主要方法是创建和附加库。一旦你了解它们,就没那么多了。从Google Apps Script "Libraries" doc。
开始