【问题标题】:Speed up the process of listing file names and links from a Google Drive folder to Google Sheets加快列出文件名和从 Google Drive 文件夹到 Google 表格的链接的过程
【发布时间】:2019-11-01 19:39:50
【问题描述】:

今天,当我在 Google 表格中列出 Google Drive 文件夹的名称和文件时,我使用了这个脚本:

function listFolderContents() {

  //Squads
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('Import!A3:B').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});

  var foldername = 'My Files';
  var folderlisting = 'listing of folder ' + foldername;

  var folders = DriveApp.getFoldersByName(foldername)
  var folder = folders.next();
  var contents = folder.getFiles();

  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getActiveSheet();
  var file;
  var name;
  var link;
  var row;
  while(contents.hasNext()) {
    file = contents.next();
    name = file.getName();
    link = file.getUrl();
    sheet.appendRow( [name, link] );     
  }  
  spreadsheet.getRange('Files!Q3:R').activate();
  spreadsheet.getRange('Import!A3:B').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);

  spreadsheet.getRange('Import!A3:B').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});  

};

发生的情况是,使用这种方法,每个名称和链接将一次出现一行,使得脚本需要很长时间才能完成。例如,想象一次为一个文件夹中的 300 个文件填充一行。

我想知道我应该修改什么以及这个脚本会是什么样子,这样这个过程会变得更快,一次收集并一次填充单元格,例如 CSV 文件导入。一次填充所有单元格。

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    它可能不会快很多,但可能会快一点。通过 id 访问文件和文件夹总是更好。既然您假设您只有一个具有该名称的文件夹,那么您不妨去查找文件夹 ID 并使用它。

    在屏幕上激活内容也需要时间,并且在应用脚本中是不必要的。它在宏中被大量使用,但在大多数脚本中却没有。

    function listFolderContents() {
      var ss=SpreadsheetApp.getActive();
      var sh=ss.getSheetByName('Import');
      sh.clear({contentsOnly: true, skipFilteredRows: true});
      var folderId="1zUNj0hrJUxcjGq5gvaIifMVwpOMVyIs2";
      var folder=DriveApp.getFolderById(folderId);
      var contents=folder.getFiles();
      while(contents.hasNext()) {
        var file=contents.next();
        sh.appendRow([file.getName(), file.getUrl()]);     
      }  
      var drg1=ss.getRange('Files!Q3:R');
      ss.getRange('Import!A3:B').copyTo(drg1, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
    };
    

    【讨论】:

    • 您好 Cooper,非常感谢您的回复...在脚本激活期间,返回以下错误:ReferenceError:" getRange "is not set. (line 13,您能帮我解决我需要调整的问题吗?
    • 我猜你的意思是:ReferenceError: "getRange" is not defined
    • 是的,是的,它工作了......但是,现在它在数据导入后没有清除页面行。但我在脚本中添加了它。谢谢老哥!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多