【问题标题】:Search for files inside of a folder using drive api使用驱动器 api 搜索文件夹内的文件
【发布时间】:2023-04-10 12:38:01
【问题描述】:

驱动api:https://developers.google.com/drive/v2/reference/files/list

我正在尝试获取我拥有的电子表格的 id,但 Logger.log() 返回多个 id 而不仅仅是一个。我认为它正在从谷歌驱动器的最近部分获取具有相同名称的文件。

我不知道如何解决这个问题,我们将不胜感激。

有没有办法只使用驱动器 api 搜索文件夹内的文件?或者我将如何排除最近部分中的文件而只搜索我驱动器中的文件?

sn-p 代码:

  //get spreadsheet
  var nameId;

  var allFiles = Drive.Files.list({
    q: "title='" + name + "' and trashed=false"
  }).items;

  for (var i = 0; i < allFiles.length; i++)
  {
    if (allFiles[i].title == name)
    {
      Logger.log("true");
      nameId = allFiles[i].id;
      Logger.log("returnTemplatedTable -- name id: " + nameId);
    }
    else
    {
      Logger.log("false");
    }
  }

  var spreadsheet = SpreadsheetApp.openById(nameId).getActiveSheet();

这是我将文件移动到文件夹的代码的 sn-p:

  //move spreadsheet to folder
  Drive.Files.update({
    "parents": [
      {
        "id": folderId
      }
    ]
  }, fileId);

但是我怎样才能搜索文件夹呢?

 


 

var list = Drive.Files.list({
    "folderId": folderId,
    q: "title='" + name + "' and trashed=false"
  }).items;

  for (var i = 0; i < list.length; i++)
  {
    Logger.log("id: " + list[i].id);
  }

【问题讨论】:

标签: javascript google-apps-script google-drive-api


【解决方案1】:

这使用驱动器 api 来查找文件夹中所有文件的名称。

 function findFilesInFolder() {
    var folderId = 'folderId'
    //searches for children of a folder
    var childrenData = Drive.Children.list(folderId)
    var children = childrenData.items;

    //loops through the children and gets the name of each one
    for (var i = 0; i < children.length; i++){
      var id = children[i].id;
      var file = Drive.Files.get(id);
      Logger.log(file.title)
    }
  }

【讨论】:

  • 谢谢,但我希望使用高级驱动器服务驱动器 API v2 来做到这一点。
  • 查看文档,json 有效负载中似乎有文件的父属性。您是否尝试过将其与 id 的文件夹进行比较?
  • 是的,我已经用我刚刚尝试过的另一个 sn-p 代码编辑了这篇文章。它仍然返回多个 id。
  • 我发布了一个经过编辑的答案。这使用Drive.Children.list 搜索文件夹的所有子级。
【解决方案2】:

这里有一个更简单的方法,使用searchFiles(params)

获取用户云端硬盘中与 给定的搜索条件。搜索条件详细谷歌 驱动 SDK 文档。注意 params 参数是一个查询 可能包含字符串值的字符串,因此请注意转义 正确使用引号(例如“title contains 'Gulliver\'s 游记'”或“标题包含“格列佛游记”')。

这是我试过的一个 sn-p:

function searchForeFile(){

    var files = DriveApp.searchFiles(
      'modifiedDate > "2013-02-28" and title contains "Gene Simmons"');
     while (files.hasNext()) {
    var file = files.next();
     Logger.log(file.getName());
  }
}

果然它返回了我正在寻找的文件:

[17-04-03 21:43:26:736 PDT] 基因西蒙斯 KISS.pdf

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多