google-apps-script - Google Apps 脚本 TeamDrive DriveApp.searchFolders 和 DriveApp.searchFiles 不返回任何结果
问题描述
我有一些用于搜索 TeamDrive 上的文件和文件夹的Google Apps 脚本代码。
我遇到的问题是,如果我的同事创建了一个文件或文件夹,当我运行我的脚本时它找不到该文件。如果我创建了一个文件,而我的同事运行了该脚本,那么即使我们都有权查看、编辑并且可以查看云端硬盘中的文件和文件夹,该脚本也找不到该文件。如果我们中的一个人编辑了另一个人制作的文件,那么它就会从搜索中看到。
在进行一些 android 开发时,我遇到了 Drive REST api 的类似问题。在 Android 中调用 files().list() 时,我花了一段时间才发现我必须设置以下内容才能使我的搜索每次都能成功。
- .setSupportsTeamDrives(真)
- .setIncludeTeamDriveItems(true)
- .setCorpora("teamDrive")
- .setTeamDriveId(myFolder.getTeamDriveId())
我假设我的应用程序脚本代码遇到了同样的问题。
//Create the N Google docs files
function CreateNFiles(){
var spreadsheet = SpreadsheetApp.getActive();
var Nmain = spreadsheet.getSheetByName("Nmain")
var spreadsheetId = spreadsheet.getId();
var pdfDir = "Form Data";
var TemplatesFolder = null;
//Check and see if there is a 'Form Data' folder
var NFolderId = null;
var RFolderId = DriveApp.getFileById(spreadsheetId).getParents().next().getId();
var files = DriveApp.searchFolders('parents="'+RFolderId+'" and trashed=false');
while (files.hasNext()) {
var myfile = files.next();
if(myfile.getName() == pdfDir){
NOFolderId = myfile.getId();
}
}
https://developers.google.com/apps-script/reference/drive/drive-app#searchFiles(String)
这说是指
https://developers.google.com/drive/api/v3/search-parameters#examples_for_teamdriveslist
所以我可能会使用
corpora="teamDrive"
有没有办法设置支持团队驱动器?和 setIncludeTeamDriveItems?和 setTeamDriveId?在谷歌应用脚本中
解决方案
在团队云端硬盘中查找文件和文件夹
这是我一直在为自己的需要而开发的几个功能。它们仍在进行中,但一个可以在团队驱动器文件夹中归档文件夹,另一个可以在团队驱动器文件夹中查找项目。Logger.log 设置为显示项目编号、标题、id 和 mimeType。
这个查找项目(文件或文件夹)。您可以通过它们的类型来区分它们。
function findItemsInTeamDriveFolder(teamDriveId,folderId){
var teamDriveId=teamDriveId || '0AFN5OZjg48ZvUk9PVA';
var folderId=folderId || '1LK76CVE71fLputdFAN-zuL-HdRFDWBGv';
var options={
"corpora":"teamDrive",
"includeTeamDriveItems":true,
"orderBy":"folder",
"q":Utilities.formatString('\'%s\' in parents',folderId),
"supportsTeamDrives":true,
"teamDriveId":teamDriveId
};
var files=Drive.Files.list(options);
var data=JSON.parse(files);
for(var i=0;i<data.items.length;i++){
Logger.log('\nItem: %s - Title: %s - Id: %s - Type:%s - Trashed: %s\n',i+1,data.items[i].title,data.items[i].id,data.items[i].mimeType,data.items[i].explicitlyTrashed?'true':'false');
}
}
这个只是在文件夹中找到文件夹。它不是可重入的,它是一个一级交易,但目前这就是我所需要的。
function findFoldersInATeamDriveFolder(teamDriveId,folderId){
var teamDriveId=teamDriveId || '0AAc6_2qyI7C0Uk9PVA';
var folderId=folderId || '1HenWOXTSCg96iAvA0ZkgEA9EGKlch4fz';
var optionalArgs={
"corpora":"teamDrive",
"includeTeamDriveItems":true,
"orderBy":"folder",
"q":Utilities.formatString('\'%s\' in parents and mimeType = \'application/vnd.google-apps.folder\'',folderId),
"supportsTeamDrives":true,
"teamDriveId":teamDriveId
}
var list=Drive.Files.list(optionalArgs)
var data=JSON.parse(list);
for(var i=0;i<data.items.length;i++){
Logger.log('\nItem: %s - Title: %s - Id: %s - Type: %s - Trashed;%s\n',i+1,data.items[i].title,data.items[i].id,data.items[i].mimeType,data.items[i].explicitlyTrashed?'true':'false');
findItemsInTeamDriveFolder(teamDriveId,data.items[i].id)
}
}
我认为他们可能会有所帮助。
推荐阅读
- javascript - 将2个数组转换为键值对象javascript
- java - 如何在 Spring 请求映射中接受多个可选参数,但一次只能接受一个?
- windows - 如何查看 MASM 指令(如 PROC、.SETFRAME)的结果。.PUSHREG
- java - 你能用Android Java写一个记录特定应用程序屏幕的应用程序吗?
- c - 检查输入是否是最大的 2 的补码整数
- javascript - Google表格根据单元格编号添加行具有值的单元格计数
- php - PHP 7.4 警告:从空值创建默认对象
- python - '\n' 符号在 python 中的工作原理
- swagger-2.0 - 开放 api 规范中的可重用参数
- kubernetes - 如何在命名空间中的作业中运行 kubectl?