在共享驱动器中查找和替换多个文档功能 代码说明注意参考

问题描述

问题:我在多个共享驱动器中有多个文档(特别是Google表格),需要替换相同的单个单词。在该论坛上进行了一些搜索,发现我下面的代码,但似乎不起作用。我没有收到任何错误消息,但是当我检查文件时,没有任何改变。我检查并确保正确输入了搜索字符串和替换字符串。

我需要做其他事情来检查共享驱动器中的文件吗?我尝试在高级Google服务中打开Drive API,但这只是在第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")
}

解决方法

DriveApp.getFiles()仅返回“我的云端硬盘”上的文件。为了能够在共享驱动器(以前称为Team Drive)中获取文件,您必须启用Drive Advanced Service,而不是

var files = DriveApp.getFiles();

使用类似

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

相关

,

要访问共享驱动器,您需要在高级Google服务中激活Drive API,但是要访问它,则必须使用Drive而不是DriveApp。 / p>

如果要专门检索共享驱动器并查找具有特定名称的文件,可以尝试以下操作:

代码

// 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
      }
   }
}

说明

以上代码通过使用Drives:list方法检索所有共享驱动器,然后对于每个共享驱动器,使用Files:list搜索所有名为FILE_NAME的文件。然后,它使用SpreadsheetApp访问每个文件。

注意

请记住,可以对代码进行自定义以满足您的特定需求。

参考