Google apps script 谷歌脚本:表单提交后创建文件夹
这是我第一次写谷歌脚本。我从未编写过JavaScript,但我有Java和Python方面的经验。我使用这个脚本的目标是,一旦提交表单,我希望脚本创建一个文件夹,该文件夹使用多项选择题的一个答案命名。文件夹应与表单所在的目录相同。到目前为止,我的Google脚本包括以下内容:Google apps script 谷歌脚本:表单提交后创建文件夹,google-apps-script,google-drive-api,google-forms,Google Apps Script,Google Drive Api,Google Forms,这是我第一次写谷歌脚本。我从未编写过JavaScript,但我有Java和Python方面的经验。我使用这个脚本的目标是,一旦提交表单,我希望脚本创建一个文件夹,该文件夹使用多项选择题的一个答案命名。文件夹应与表单所在的目录相同。到目前为止,我的Google脚本包括以下内容: function createFolder(e) { var existingForm = FormApp.getActiveForm(); if(e){ var response = e.response
function createFolder(e) {
var existingForm = FormApp.getActiveForm();
if(e){
var response = e.response;
var items = response.getItemResponses();
DriveApp.createFolder(items[1].getResponse());
}
}
function createSubmitTrigger(){
var existingForm = FormApp.getActiveForm();
ScriptApp.newTrigger('createFolder').forForm(existingForm).onFormSubmit().create();
}
这是一个绑定到我已经创建的表单的脚本。我在脚本编辑器中运行了脚本,没有收到任何错误。我自己也提交了对表单的回复,但没有创建新文件夹。执行记录显示脚本执行了getActiveForm()
函数,但没有超过该函数。因此,我相信它没有进入我在第三行的“如果”语句。我确信我遗漏了一些基本的东西,但我不太确定它是什么。在此方面的任何帮助都将不胜感激
顺便说一句,我确实在收件箱中查看了是否收到了触发器的错误消息,但没有看到任何内容。您不能将参数传递给触发器函数。为什么要使用触发器? 您可以在脚本中使用Folder类 这一个有效:
function createFolder(e) {
var items = e.response.getItemResponses()
var name = items[1].getResponse();
new_folder = DriveApp.createFolder(name);
var submittedID = items[3].getResponse();
for (i = 0; i < submittedID.length; i++) {
var file = DriveApp.getFileById(submittedID[i]);
file.makeCopy(new_folder);
}
}
函数createFolder(e){
var items=e.response.getItemResponses()
var name=items[1]。getResponse();
新建文件夹=DriveApp.createFolder(名称);
var submittedID=items[3]。getResponse();
对于(i=0;i
创建一个新文件夹,并将作为响应三上传的文件(图像、音频等)放入一个新文件夹。我的第二个响应将成为新文件夹的名称。通过这种方式,您可以轻松区分每次提交时上载的文件,而不是将它们全部放在同一文件夹中
不完全是你想要的,但非常接近。对。这是我的便士。我一点经验也没有,但在经历了一些严重的紧张之后,我设法打破了这一局面
function createFolder(e) {
var items = e.response.getItemResponses()
var documentName = items[0].getResponse();
var sourceFolder = DriveApp.getFolderById('copy and paste parent folderid here');
var new_folder = sourceFolder.createFolder(documentName);
var submittedID = items[3].getResponse();
for (var i = 0; i < submittedID.length; i++) {
var file = DriveApp.getFileById(submittedID[i]);
file.makeCopy(new_folder);
}
}
函数createFolder(e){
var items=e.response.getItemResponses()
var documentName=items[0]。getResponse();
var sourceFolder=DriveApp.getFolderById('copy and paste parent folderid here');
var new_folder=sourceFolder.createFolder(documentName);
var submittedID=items[3]。getResponse();
对于(var i=0;i
我不想/不需要这样做,但如果您想删除原始上传的文件,请使用
[setTrashed(True)][1]
。在关闭“for”循环之前,将其添加到file.makeCopy下。请注意,如果您这样做,响应电子表格中的链接将不起作用,但您将在子文件夹中拥有上载文件的副本。我使用触发器,因为我希望仅在提交表单后创建新文件夹。所以我不确定你的建议是否适合我。我不确定我是否听懂了你的话。提交表单后不创建“e”变量吗?因此,createSubmitTrigger
函数应该在表单提交后运行,createFolder
应该从createSubmitTrigger
继承e
。我没有正确理解吗?在检查之前,您是否尝试记录e的值,以确保发送了正确的事件?
function createFolder(e) {
var items = e.response.getItemResponses()
var documentName = items[0].getResponse();
var sourceFolder = DriveApp.getFolderById('copy and paste parent folderid here');
var new_folder = sourceFolder.createFolder(documentName);
var submittedID = items[3].getResponse();
for (var i = 0; i < submittedID.length; i++) {
var file = DriveApp.getFileById(submittedID[i]);
file.makeCopy(new_folder);
}
}