我对此代码有点麻烦,这是一个绑定在Google表单中的脚本,并在表单提交时触发:
function onFormSubmit(e) {
//these lines are to get the email address that was entered into the form
var familyResponses = e.response.getItemResponses();
var familyEmailAddress = familyResponses[0].getResponse();
//this loads the template spreadsheet
templateSpreadsheetFile = DriveApp.getFileById("xxxxxxxx");
//this generates an 8-digit random number
var eightDigitCode = Math.floor(Math.random() * (99999999 - 10000000 + 1)) + 10000000;
//this makes a copy of the template spreadsheet, with the 8-digit code as the name of the copy, in the specified folder.
var FamilyWorksheetsFolder = DriveApp.getFolderById("yyyyyyyy");
var newSpreadsheetFile = templateSpreadsheetFile.makeCopy(eightDigitCode, FamilyWorksheetsFolder);
newSpreadsheetFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.EDIT); //this allows anyone with the link to view+edit the new file
//now we need to add a script to the new spreadsheet, that makes a copy every time it is edited
ScriptApp.newTrigger('familyWorksheetScript')
.forSpreadsheet(newSpreadsheetFile)
.onEdit()
.create();
//these lines build the subject and body of the email
var emailSubject = "link to your worksheet";
var emailBody = "Here is the link to your worksheet: \n" + newSpreadsheetFile.getUrl() + "\n\n\
Your spreadsheet is named with your unique 8-digit code " + eightDigitCode
//send the email
GmailApp.sendEmail(familyEmailAddress, emailSubject, emailBody);
}
function familyWorksheetScript() {
}
============================================== < / p>
这里的想法非常简单:
以上所有作品。但我现在想在这个表单绑定脚本中添加该功能,以创建一个绑定到新电子表格的编辑后触发脚本(模板副本,以8位代码命名)。这是我无法开展工作的部分。它是ScriptApp.newTrigger代码块,当我发表评论时,整个脚本运行正常我最后收到了电子邮件。但是当我在ScriptApp.newTrigger代码中取消注释时,脚本就会在该位置死亡。我可以告诉它在那里死亡,因为新的电子表格仍然被创建,但电子邮件没有被发送。我不知道为什么它不工作,我不知道如何解决它。
非常感谢任何帮助。谢谢!
答案 0 :(得分:0)
您无法在作为新工作表用户的工作表上创建触发器,您创建的所有内容都属于您!触发的函数将作为“你”运行,而不是新用户。
我建议使用UI来创建“onOpen”函数,该函数会要求新用户单击“按钮”以运行将创建onEdit触发器的函数,并要求他们进行显式授权。 / p>
下面是一个示例代码,其中有一个onEdit触发器,用于处理活动电子表格的副本,仅用于测试目的。
function createNewCopy(){
var ss = SpreadsheetApp.getActive();
var newSs = DriveApp.getFileById(ss.getId()).makeCopy('copyOf-'+ss.getName());
var nSs = SpreadsheetApp.openById(newSs.getId());
var trigger = ScriptApp.newTrigger('onEdit').forSpreadsheet(nSs.getId()).onEdit().create();
}
原始SS中的onEdit就这么简单,只是为了检查它的工作原理:
function onEdit(){
Browser.msgBox('hello');
}
请注意,电子表格的脚本编辑器资源选项卡中不会显示任何触发器,它只会显示在您自己的Google帐户中自己触发的功能列表中。