Mic*_*Sz. 0 google-apps-script google-drive-api
鉴于以下 Google Apps 脚本代码片段:
function myFunction() {
var files = DriveApp.getFolderById('xxx').searchFiles('123')
while (files.hasNext()) {
var file = files.next()
Logger.log(file.getName())
}
}
Run Code Online (Sandbox Code Playgroud)
我越来越:
无效参数:q(第 x 行,文件“代码”)
从while (files.hasNext())语句行。
该行不包含我知道的任何错误。有趣的是,当我.searchFiles('123')与交换时.getFiles(),错误不会出现并且代码会执行。
这是否意味着.searchFiles('123')返回的对象有问题(它应该返回FileIterator对象)?不幸的是,Javascript 只在运行时检查返回数据类型,所以在我运行它之前我无法真正查看它是否正确。
根据 的函数文档searchFiles,预期参数是符合 Google Drive API 的“搜索文件”指南中描述的语法的查询字符串
获取用户驱动器中与给定搜索条件匹配的所有文件的集合。搜索条件在Google Drive SDK 文档中有详细说明。请注意,
params参数是可能包含字符串值的查询字符串,因此请注意正确转义引号(例如"title contains 'Gulliver\\'s Travels'"或'title contains "Gulliver\'s Travels"')。
需要注意的是驱动器V2使用title的文件名,和驱动器V3使用name的文件名。Apps Script 的高级服务客户端库Drive使用 v2,因此这可能也是 Drive Service ( DriveApp)使用的语法。
错误信息没有出现在 with 行searchFiles的原因是因为返回值是 a FileIterator,而不是实际结果。这个(和大多数)迭代器是惰性求值的,因此您的搜索查询在您调用之前实际上不会执行files.hasNext()。
要解决此问题,您必须指明应该搜索什么以及如何搜索,即提供Field和Operator,而不仅仅是Value。
function foo() {
const queries = ["fullText contains '123'",
"mimeType='" + MimeType.GOOGLE_SHEETS + "'"];
const matches = queries.map(function (qs) {
return getMatchingFiles_(qs);
});
// Log the results in the Apps Script logger. (Use console.log for Stackdriver)
matches.forEach(function (queryResult, i) {
Logger.log("Results for query #" + i
+ ", \"" + queries[i] + "\" are:");
queryResult.forEach(function (file) {
Logger.log(file.getId() + ": '" + file.getName() + "'");
});
});
}
function getMatchingFiles_(query, folderId) {
// Default to DriveApp.searchFiles if no folder ID given.
folder = folderId ? DriveApp.getFolderById(folderId) : DriveApp;
const search = folder.searchFiles(query);
const results = [];
while (search.hasNext())
results.push(search.next());
return results;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2240 次 |
| 最近记录: |