防止创建重复的 Google 个文件夹
Prevent duplicate Google folders being created
下面的两个脚本生成一个新文件夹,其中包含一个新文档,该文档基于 Google 表单的答案。
需要帮助,如果有人知道如何防止创建重复的文件夹
创建频道文件夹():
This is the first trigger on form submission and creates a folder that
in my case is named after a 'Channel Name' which is in row 2 of the
Google sheet linked to the form.
function createChannelFolder() {
var ss = SpreadsheetApp.getActive();
var names = ss.getSheetByName("SHEETNAME");
var ChannelName = names.getRange(names.getLastRow(), 2).getValue();
var parentFolder=DriveApp.getFolderById("FOLDERID");
return parentFolder.createFolder(ChannelName);
}
自动填写GoogleDocFromForm(e):'
This is the second trigger on form submission and creates a copy of a
template document and then fills in answers from a Google form based
on the rows of the Google sheet linked to the form.
function autoFillGoogleDocFromForm(e) {
//e.values is an array of form values
var Timestamp = e.values[0];
var Channel = e.values[1];
var Name = e.values[2];;
var file = DriveApp.getFileById('FILEID');
var folder = createChannelFolder();
var copy = file.makeCopy(Channel + ',' + Name, folder);
var newId = copy.getId();
var doc = DocumentApp.openById(newId);
var body = doc.getBody();
body.replaceText('{{Timestamp}}', Timestamp);
body.replaceText('{{Channel}}', Channel);
body.replaceText('{{Name}}', Name);
doc.saveAndClose();
解决方案:
您可以检查是否存在同名文件夹,否则不要创建两次。像这样修改 createChannelFolder()
:
function createChannelFolder() {
var ss = SpreadsheetApp.getActive();
var names = ss.getSheetByName("SHEETNAME");
var ChannelName = names.getRange(names.getLastRow(), 2).getValue();
var folders = DriveApp.getFoldersByName(ChannelName);
while (folders.hasNext()) {
folder = folders.next();
if(folder.getName()==ChannelName){
return folder;}
}
var parentFolder=DriveApp.getFolderById("FOLDERID");
return parentFolder.createFolder(ChannelName);
}
可重现的例子:
以下代码片段创建并 return 一个名为 test
的新文件夹。如果后者已经存在,它不会创建一个新的,它 return 是现有的。
function createChannelFolder() {
var ChannelName = "test";
var folders = DriveApp.getFoldersByName(ChannelName);
while (folders.hasNext()) {
folder = folders.next();
if(folder.getName()==ChannelName){
return folder;}
}
var parentFolder=DriveApp.getFolderById("folderID");
return parentFolder.createFolder(ChannelName);
}
限制:
- 如果您有多个同名文件夹 (
ChannelName
),则
该代码将 return 它找到的第一个文件夹。为了
代码才能正常工作,您需要删除所有重复项
反正你不需要的文件夹,因为这是你想避免的东西。
下面的两个脚本生成一个新文件夹,其中包含一个新文档,该文档基于 Google 表单的答案。
需要帮助,如果有人知道如何防止创建重复的文件夹
创建频道文件夹():
This is the first trigger on form submission and creates a folder that in my case is named after a 'Channel Name' which is in row 2 of the Google sheet linked to the form.
function createChannelFolder() {
var ss = SpreadsheetApp.getActive();
var names = ss.getSheetByName("SHEETNAME");
var ChannelName = names.getRange(names.getLastRow(), 2).getValue();
var parentFolder=DriveApp.getFolderById("FOLDERID");
return parentFolder.createFolder(ChannelName);
}
自动填写GoogleDocFromForm(e):'
This is the second trigger on form submission and creates a copy of a template document and then fills in answers from a Google form based on the rows of the Google sheet linked to the form.
function autoFillGoogleDocFromForm(e) {
//e.values is an array of form values
var Timestamp = e.values[0];
var Channel = e.values[1];
var Name = e.values[2];;
var file = DriveApp.getFileById('FILEID');
var folder = createChannelFolder();
var copy = file.makeCopy(Channel + ',' + Name, folder);
var newId = copy.getId();
var doc = DocumentApp.openById(newId);
var body = doc.getBody();
body.replaceText('{{Timestamp}}', Timestamp);
body.replaceText('{{Channel}}', Channel);
body.replaceText('{{Name}}', Name);
doc.saveAndClose();
解决方案:
您可以检查是否存在同名文件夹,否则不要创建两次。像这样修改 createChannelFolder()
:
function createChannelFolder() {
var ss = SpreadsheetApp.getActive();
var names = ss.getSheetByName("SHEETNAME");
var ChannelName = names.getRange(names.getLastRow(), 2).getValue();
var folders = DriveApp.getFoldersByName(ChannelName);
while (folders.hasNext()) {
folder = folders.next();
if(folder.getName()==ChannelName){
return folder;}
}
var parentFolder=DriveApp.getFolderById("FOLDERID");
return parentFolder.createFolder(ChannelName);
}
可重现的例子:
以下代码片段创建并 return 一个名为 test
的新文件夹。如果后者已经存在,它不会创建一个新的,它 return 是现有的。
function createChannelFolder() {
var ChannelName = "test";
var folders = DriveApp.getFoldersByName(ChannelName);
while (folders.hasNext()) {
folder = folders.next();
if(folder.getName()==ChannelName){
return folder;}
}
var parentFolder=DriveApp.getFolderById("folderID");
return parentFolder.createFolder(ChannelName);
}
限制:
- 如果您有多个同名文件夹 (
ChannelName
),则 该代码将 return 它找到的第一个文件夹。为了 代码才能正常工作,您需要删除所有重复项 反正你不需要的文件夹,因为这是你想避免的东西。