Функция поиска и замены нескольких документов на общих дисках

Проблема: у меня есть несколько документов (в частности, Google Таблицы) на нескольких общих дисках, на которых нужно заменить одно и то же слово. Некоторый поиск по этому форуму нашел мне следующий код, но, похоже, он не работает. Я не получаю сообщений об ошибках, но когда я проверяю файлы, ничего не изменилось. Я проверил и убедился, что правильно ввел строку поиска и строку замены.

Нужно ли мне делать что-то другое, чтобы заставить его проверять файлы на общих дисках? Я попытался включить Drive API в Advanced Google Services, но в строке 6 возникла ошибка (var doc = DocumentApp.openById (file.getId ());)

Вот код, который я использовал:

     function myFunction() {
  var files = DriveApp.getFiles();   // Note: this gets *every* file in your Google Drive
  while (files.hasNext()) {
    var file = files.next();
    Logger.log(file.getName());
    var doc = DocumentApp.openById(file.getId());
    doc.replaceText("My search string or regex", "My replacement string");
  }
  Logger.log("Done")
}

person Brie    schedule 13.10.2020    source источник


Ответы (2)


DriveApp.getFiles() возвращает только файлы на Моем диске. Чтобы иметь возможность получать файлы на общем диске (ранее называвшемся общим диском), вам необходимо включить расширенную службу Диска и вместо

var files = DriveApp.getFiles();

используйте что-то вроде

var files = Drive.Files.list(options);

Связанный

person Rubén    schedule 13.10.2020

Чтобы получить доступ к общим дискам, вам необходимо активировать Drive API в расширенных сервисах Google, но для доступа к нему вам нужно будет использовать Drive, а не DriveApp.

Если вы хотите получить именно общие диски и искать файлы с определенным именем, вы можете попробовать следующее:

Код

// Copyright 2020 Google LLC.
// SPDX-License-Identifier: Apache-2.0

function retrieveFiles() {
   var allDrives = Drive.Drives.list().items;
   let fileName = 'FILE_NAME';
   for (let i = 0; i < allDrives.length; i++) {
      var driveId = allDrives[i].id;
      console.log(id)
      var optionalArgs = {
         'driveId': driveId,
         'includeItemsFromAllDrives': true,
         'corpora': 'drive',
         'supportsAllDrives': true,
         'q': "title=" + "'" + fileName + "'"
      };
      var filesReturned = Drive.Files.list(optionalArgs).items;
      for (let j = 0; j < filesReturned.length; j++) {
         var fileId = filesReturned[j].id;
         var sheet = SpreadsheetApp.openById(fileId);
         //sheet manipulation
      }
   }
}

Объяснение

Приведенный выше код извлекает все общие диски, используя _4 _, а затем для каждого общего диска ищет все файлы с именем FILE_NAME, используя _ 6_. Затем он обращается к каждому файлу с помощью SpreadsheetApp.

Примечание

Помните, что код можно настроить в соответствии с вашими потребностями и требованиями.

Ссылка

person ale13    schedule 14.10.2020