Как правильно использовать searchFile и searchFolder одновременно? - Сценарий приложения - PullRequest
0 голосов
/ 12 ноября 2018

Следующий скрипт выполняет поиск во всех электронных таблицах с определенным именем на диске, начиная с определенной папки.

function searchSSH(folder, path) { 
  if (folder == null && path == null) {
  return 
  searchSSH(DriveApp.getFolderById("ID"), "");
  }

  var files = [];

  path = path + "/" + folder.getName();  
  var searchFile = "fullText contains 'Project <>' and mimeType='" + MimeType.GOOGLE_SHEETS + "'";
  var fileIterate = folder.searchFiles(searchFile);

  while ( fileIterate.hasNext() ) {
    var file = fileIterate.next();
    var fileId = file.getId();
    var name = file.getName();
    files.push(name);

  for (var i=0; i<files.length; i++){
    Logger.log(files[i]);
  } 
 }

  var folderIterate = folder.getFolders();
  while(folderIterate.hasNext()) {
    var searchFold = searchSSH(folderIterate.next(), path);
    for (var i = 0; i < searchFold.length; i++) {
    files.push(searchFold[i]);
    }     
  }
  return files;    
 }

То, что я пытаюсь сделать, это посмотреть, как я могу это сделать, чтобы я мог также искать определенную папку, как это делает searchFile, и я пытаюсь сделать это так ...

    function searchSSH() {         
      var Folder =  DriveApp.getFolderById("ID");

      var folders = Folder.searchFolders('fullText contains "project"');
      while (folders.hasNext()) {
        var folder1 = folders.next();
        Logger.log(folder1.getName());
        for (var i = 0; i < folder1.length; i++) {
          files.push(folder1[i]);
        }     
      }

      var files = [];
      var searchFile = "fullText contains 'test <>' and mimeType='" + MimeType.GOOGLE_SHEETS + "'";
      var fileIterate = Folder.searchFiles(searchFile);

      while ( fileIterate.hasNext() ) {
        var file = fileIterate.next();
        var fileId = file.getId();
        var name = file.getName();
        files.push(name);

        for (var i=0; i<files.length; i++){
          Logger.log(files[i]);
        } 
      }       
      return files;    
    }

Но не работает. Я пытаюсь перебирать все папки, пока не найду папку с именем project, и продолжаю перебирать в этой папке, пока не найду все таблицы с именем test, а выполню поиск только в первой папке. .

1 Ответ

0 голосов
/ 15 ноября 2018
  1. Я пытаюсь выполнить итерацию между папками, пока не найду папку с именем Project, и внутри этой папки продолжу итерацию, пока не найду файл с именем Test и его типом электронную таблицу.
  2. Первый скрипт, если он находит файл, но я хочу указать, я заглядываю в папки с именем Project, чтобы улучшить производительность скрипта
  3. Второй скрипт, который я пробую, не повторяется, поэтому онне работает, потому что когда я запускаю его, он находит только первую папку и не ищет внутри других папок, спасибо за попытку помочь мне.Я надеюсь, что теперь это дало мне понять

Из вашего этого ответа я мог бы понять следующее.

  • Вы хотите получить электронную таблицу с именем файлаTest в папке с именем Project.Вы хотите сделать это с низкой стоимостью процесса.

Если мое понимание верно, как насчет этих примеров сценариев?Пожалуйста, выберите из них для вашей ситуации.Я думаю, что есть несколько ответов для вашей ситуации.Поэтому, пожалуйста, воспринимайте этот ответ как один из них.

Шаблон 1:

Поток:

  1. Извлечение файлов из файла с именем Test с использованием getFilesByName().
  2. Извлечение родительских папок каждого файла с использованием getParents().
  3. Если имя папки Project, а mimeType - Spreadsheet, он извлекает файл.

Пример сценария:

var fileName = "Test";
var folderName = "Project";
var files = DriveApp.getFilesByName(fileName);
while (files.hasNext()) {
  var file = files.next();
  var parents = file.getParents();
  while (parents.hasNext()) {
    var parent = parents.next();
    if (file.getMimeType() == MimeType.GOOGLE_SHEETS && parent.getName() == folderName) {

      // do something

    }
  }
}

Шаблон 2:

Поток:

  1. Извлечение папок из имени папки Project с использованием getFoldersByName().
  2. Извлечение файлов в каждой папке с использованием getFilesByName().
  3. Если имя файла Test, а mimeType - Spreadsheet, он извлекает файл.

Пример сценария:

var fileName = "Test";
var folderName = "Project";
var folders = DriveApp.getFoldersByName(folderName);
while (folders.hasNext()) {
  var folder = folders.next();
  var files = folder.getFilesByName(fileName);
  while (files.hasNext()) {
    var file = files.next();
    if (file.getMimeType() == MimeType.GOOGLE_SHEETS && file.getName() == fileName) {

      // do something

    }
  }
}

Шаблон 3:

Поток:

  1. Извлечение идентификаторов папок из имени Project с использованием getFoldersByName().
  2. Извлечениефайлы с родительской папкой Project и именем файла Test и mimeType таблицы, используя searchFiles().

Пример сценария:

var fileName = "Test";
var folderName = "Project";
var folders = DriveApp.getFoldersByName(folderName);
var folderIds = [];
while (folders.hasNext()) {
  folderIds.push(folders.next().getId());
}
folderIds.forEach(function(id) {
  var params = "'" + id + "' in parents and title='" + fileName + "' and mimeType='" + MimeType.GOOGLE_SHEETS + "'";
  var files = DriveApp.searchFiles(params);
  while (files.hasNext()) {
    var file = files.next();

      // do something

  }
});

Ссылки:

Если это не то, что вы хотите, извините.

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