防止创建重复的 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 它找到的第一个文件夹。为了 代码才能正常工作,您需要删除所有重复项 反正你不需要的文件夹,因为这是你想避免的东西。