我创建了一个脚本,每次提交表单时都会创建一个新文件夹。该脚本的目的是将每个新创建的文件夹放在一个特定的父文件夹中,该文件夹由电子表格上的列值确定(提交表单时会生成新值)。目前,即使设置了触发事件,该脚本也不会自动启动,但在手动运行时将在适当的位置启动并创建新文件夹。任何帮助将不胜感激。
function createNewFolder() {
// identify the sheet where the data resides
var ss = SpreadsheetApp.getActive();
var names = ss.getSheetByName("Form Responses 1");
var ids = ss.getSheetByName("Form Responses 1");
//identify the cell that will be used to name the folder
var getName = names.getRange(names.getLastRow(), 3).getValue();
//identify the cell that determines which parent folder to use
var folderId = ids.getRange(ids.getLastRow(), 5).getValue();
//identify the parent folder the new folder will be in
var parentFolder = DriveApp.getFolderById(folderId);
//create the new folder
var newFolder = parentFolder.createFolder(getName);
}
触发器大约在85%的时间内失败,并且设置为在关联的电子表格上记录新表单响应时触发。
答案 0 :(得分:0)
尝试以此替换您的onFormSubmit函数:
此功能应在具有链接表的电子表格中创建。此功能利用在表单提交事件对象中发送的数据。不要忘记在函数中包含“ e”作为参数。
function createNewFolder(e) {
var parentFolder = DriveApp.getFolderById(e.values[4]);
var newFolder = parentFolder.createFolder(e.values[2]);
}
另外,由于我们发现虚假表单提交触发器存在很多问题,因此您可能还想看看this question。如果您不需要很好地实现它,那么可能要考虑一下。
答案 1 :(得分:-1)
最有可能是异步问题。在parentFolder从DriveApp提取数据之前,parentFolder.createFolder函数可能会被调用。 试试这个:
var newFolder = parentFolder.then(() => {
parentFolder.createFolder(getName)
})