Google apps script formSubmit中文件的增补者
我正在创建一个脚本来执行下面描述的操作。到目前为止,我已经设法使前两个部分正常工作,但现在我仍在继续工作。我已经查看了几个响应论坛并尝试了这些建议,但没有成功 所需的脚本流: 从电子表格表格提交的表格 完成字段: 时间戳 用户名(提交时收集的电子邮件) 大学生 等级 干预计划 核心阅读/数学 团队(电子邮件列表) 1脚本在FormSubmit上运行,然后创建模板文档的副本,将该新副本重命名为e.value“student”以表单形式提交 2然后用表单中提交的值替换文档中选定的文本字符串 3向新文档添加编辑器,并发送带有所需说明的通知 4创建活动(从提交日期算起一周)活动详细信息包括说明和到共享文档的链接,供团队成员完成输入,向电子邮件列表发送活动邀请 这是目前为止的工作脚本Google apps script formSubmit中文件的增补者,google-apps-script,google-docs,Google Apps Script,Google Docs,我正在创建一个脚本来执行下面描述的操作。到目前为止,我已经设法使前两个部分正常工作,但现在我仍在继续工作。我已经查看了几个响应论坛并尝试了这些建议,但没有成功 所需的脚本流: 从电子表格表格提交的表格 完成字段: 时间戳 用户名(提交时收集的电子邮件) 大学生 等级 干预计划 核心阅读/数学 团队(电子邮件列表) 1脚本在FormSubmit上运行,然后创建模板文档的副本,将该新副本重命名为e.value“student”以表单形式提交 2然后用表单中提交的值替换文档中选定的文本字符串 3向新文
function formSubmitValues(e) {
var timeStamp = e.values[0];
var userEmail = e.values[1];
var student = e.values[2];
var grade = e.values[3];
var conern = e.values[4];
var readingCore = e.values[5];
var mathCore = e.values[6];
var interventions = e.values[7];
var team = e.values[8].toString(); // "just to be sure"..Henrique says add .toString this allowed the replaceText part to work
//Makes copy of template document and renames
var tempID = ("1Rq0pDAnuGNfL6W3GB0ZuLeWM2uYzHpKzoyxoXlwjtgE") // use document ID from Template Document
var copyId = DocsList
.getFileById(tempID)
.makeCopy(student + " Initial Referral") // names new copy as student's name
.getId();
// trying to add editors to new document using email list generated in form submit value of "team"
DocsList.getFileById(copyId).addEditors([team]);
// replaces text within template with selected fields from formSubmitValues
var doc = DocumentApp.openById(copyId)
var body = doc.getActiveSection();
body.replaceText("%STUDENT%", student);
body.replaceText("%DATE%", timeStamp);
body.replaceText("%TEACHER%", userEmail);
body.replaceText("%TEAM%", team);
return doc;
}
报告的问题响应:他们说:“函数采用数组或字符串,如:DocsList.getFileById(copyId).addEditors(['parent@domain.com', 'parent2@domain.com”);
我试着像这样把电子邮件直接输入到脚本中,效果很好。
因此,我的问题不是“addEditors
方法,而是如何正确传递表单提交的电子邮件。有什么建议吗
我已经尝试过使用或不使用.toString()和使用.Split(“,”)的所有组合
重新定义问题:因此这是一个如何从e.values表单提交中传递电子邮件的问题
这就是我现在的处境:
当我直接在脚本中键入电子邮件时:.addEditors(['parent@domain.com', 'email2@domain.net', 'email3@gmail.com“]
它可以工作(我确实需要将脚本中的addEditors
方法移到.makeCopy
之后,而不是移到末尾。)
这是执行记录显示的内容:
File.addEditors([[parent@domain.com, email2@domain.net]])
,它运行脚本的其余部分。注意:我不理解的一部分是单引号,即“电子邮件”,它们必须在脚本中键入,但在运行时不会显示在成绩单上。我尝试将它们放在表单中的电子邮件周围,但它会使它们显示在成绩单中,并且仍然无法运行
这就是脚本现在的样子:
var tempID = ("1Rq0pDAnuGNfL6W3GB0ZuLeWM2uYzHpKzoyxoXlwjtgE") // use document ID from Template Document
var copyId = DocsList
.getFileById(tempID)
.makeCopy(student + " - TestingCopy") // names new copy as student's name + text
.addEditors([team.split(',')])
.getId();
但是当我使用var团队时,无论是否使用.split(',')
它都不起作用。但是在转录本中它显示:
File.addEditors([[rreynolds@domain.net, parent@domain.com]])
这看起来与它工作时显示的内容相同,但这是在转录本中显示的最后一件事,编辑器不会添加到文档中,脚本也不会完成
我显然不理解这里的某些内容。是否有一种方法可以让团队e中的电子邮件以addEditors方法所要求的方式进行处理?在电子表格单元格中,它们显示为CSVrreynolds@domain.net, parent@domain.com
他们必须一次读一个吗,还是什么的
我学到了很多,非常感谢你的帮助。我很抱歉对所有评论感到困惑,但我不确定如何正确地解决这个论坛中的问题。例如:我应该返回并编辑我的原始脚本以显示当前版本,还是将其添加到其他地方?我正在努力保持对话的流畅性,以便它是easier供其他人跟随-谢谢rob我建议几件事
在代码中添加几个Logger.log语句以打印调试信息
在代码的整个部分添加一个try…catch块并打印出异常。查看是否有异常
最后,使用“执行记录”窗口查看脚本停止的位置(如果停止了)。通过电子邮件添加编辑器有两种方法:添加编辑器([emailAddresses])
和添加编辑器(emailAddress)
第一个有一个“s”,需要一个电子邮件地址字符串数组,第二个以单个字符串作为参数。您应该使用第二个或在代码中向电子邮件字符串添加[括号]
关于你的评论//需要弄清楚在哪里/如何:。添加者(email1、email2等);
//这是从DocsList类还是DocumentApp类完成的
addEditor()
和addEditor()
属于,作为DocsList类的成员,您可以使用用户对象或用户电子邮件添加用户,如文档中所述。
它可以像这样使用DocFile.addEditors([email1,email2])
编辑:这篇文章有很多评论,很抱歉,阅读起来很不方便……我用电子表格测试了这些加法器的功能,结果与预期一样,使用简单数组处理多个用户的电子邮件,使用字符串处理单封电子邮件。文档服务
似乎与加法器()有问题
方法,并应将其报告给问题跟踪者
已报告我已报告-Rocketrob请让我给出最后(希望)明确的答案:(感谢分享电子表格,这更容易操作;-)
这里是你的代码完全工作
我创建了一些中间变量来说明它是如何工作的
function formSubmitEditors(e) {
// defines spreadsheet form events on submit of form. This function formSubmitEditors is triggered on formSubmit
var timeStamp = e.values[0];
var fileName = e.values[1];
var team = e.values[2].replace(/, /g,"|"); // remove unwanted spaces and commas replace by | for visibility ;-)
Logger.log(team);// contains | as separators
var teamArray = team.split('|');
Logger.log(teamArray.length+' : '+teamArray);// check that it is an array of x elements
//Makes copy of template document and renames
var tempID = '1Rq0pDAnuGNfL6W3GB0ZuLeWM2uYzHpKzoyxoXlwjtgE' // use document ID from Template Document
var copyId = DocsList
.getFileById(tempID)
.makeCopy(fileName + " - TestingCopy") // names new copy as student's name + text
.getId(); //
var file = DocsList.getFileById(copyId).addEditors(teamArray);
// replaces merged-text values within template with selected fields from formSubmitValues
var doc = DocumentApp.openById(copyId)
var body = doc.getActiveSection();
body.replaceText("%FILE%", fileName);// you wrote %FILENAME% in place of %FILE%
body.replaceText("%DATE%", timeStamp);
body.replaceText("%TEAM%", team);// it will be shown with | as separators, if you don't like it replace team by teamArray.toString() to get commas again.
}
编辑:我删除了team事件的toString(),这不是必需的,因为e.parameters已经是字符串了
EDIT2:为了完成并完成初始问题中需要的操作,您可以将代码结尾替换为下周创建Cal事件并发送带有文档链接的邀请的代码
var file = DocsList.getFileById(copyId).addEditors(editorsArray);
var fileurl = file.getUrl();
Logger.log(fileurl)
// replaces merged-text values within template with selected fields from formSubmitValues
var doc = DocumentApp.openById(copyId)
var body = doc.getActiveSection();
body.replaceText("%FILE%", fileName);
body.replaceText("%DATE%", timeStamp);
body.replaceText("%MAILS%", editors);
var Cal = CalendarApp.getCalendarsByName('testencodage')[0];// replace with your calendar name you want to use
var newEvent = Cal.createAllDayEvent('Fill the questionnary', new Date(new Date(newtimeStamp).getTime()+7*24*3600*1000), { guests : e.values[2] , sendInvites : true , description :"Don't forget to fill this document "+fileurl})
}
只需在一封电子邮件中使用此功能,但无法使用g