Ускорьте процесс перечисления имен файлов и ссылок из папки Google Drive в Google Sheets - PullRequest
1 голос
/ 01 ноября 2019

Сегодня, когда я перечисляю имена и файлы папки Google Drive в Google Sheets, я использую этот сценарий:

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. Это заполняет все клетки сразу.

1 Ответ

1 голос
/ 01 ноября 2019

Это, вероятно, не намного быстрее, но может быть немного. Всегда лучше обращаться к файлам и папкам по идентификатору. Поскольку вы предполагали, что у вас есть только одна папка с таким именем, вы можете просто найти идентификатор папки и использовать ее. Также активация чего-либо на экране требует времени и не нужна в скриптах приложений. Он часто используется в макросах, но не в большинстве скриптов.

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

Дайте мне знать, если у вас есть какие-либо проблемы с ним. Я буду рад помочь вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...