【问题标题】:Prevent duplicate Google folders being created防止创建重复的 Google 文件夹
【发布时间】:2020-09-05 12:01:32
【问题描述】:

下面的两个脚本会生成一个新文件夹,其中包含一个基于 Google 表单答案的新文档。

需要帮助,如果有人知道如何防止创建重复文件夹


CreateChannelFolder():

这是表单提交的第一个触发器,并创建一个文件夹 在我的例子中,它以第 2 行中的“频道名称”命名 链接到表单的 Google 表格。

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); 

}

AutoFillGoogleDocFromForm(e):'

这是表单提交的第二个触发器并创建一个副本 模板文档,然后填写基于 Google 表单的答案 在链接到表单的 Google 工作表的行上。

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(); 

【问题讨论】:

    标签: google-apps-script google-sheets google-drive-api google-docs google-forms


    【解决方案1】:

    解决方案:

    您可以检查是否存在具有该名称的文件夹,否则不要创建两次。像这样修改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);         
    }
    

    可重现的例子:

    以下代码 sn-p 创建并返回一个名为 test 的新文件夹。如果后者已经存在,则不会创建新的,而是返回现有的。

    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),则 该代码将返回它找到的第一个文件夹。为了 代码才能正常工作,您需要删除所有重复项 无论如何您都不需要的文件夹,因为这是您想要避免的。

    【讨论】:

    • 再次感谢马里奥斯,但这似乎不起作用,我正在努力寻找避免这种情况的方法,但看到其他一些我无法实施解决方案的类似报告; stackoverflow.com/questions/11910734/…stackoverflow.com/questions/44607607/…stackoverflow.com/questions/41648174/…
    • @EwanFarry 我认为问题在于您已经有重复的文件夹。请在使用我的解决方案之前删除它们。还要检查我更新的答案(我添加了有限制的部分)。另外,出于文档原因,如果它有帮助,请接受答案,并考虑投票。
    • 嗨@Marios 我想我误解了触发器功能并且每个脚本都有一组。只制作一个触发器就可以解决它!非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多