В документации по функции searchFiles
ожидаемым аргументом является строка запроса, соответствующая синтаксису, описанному в руководстве «Поиск файлов» API Google Drive
Получает коллекцию всех файлов на диске пользователя, которые соответствуют заданным критериям поиска. Критерии поиска приведены в документации Google Drive SDK . Обратите внимание, что аргумент params
является строкой запроса, которая может содержать строковые значения, поэтому старайтесь правильно экранировать кавычки (например, "title contains 'Gulliver\\'s Travels'"
или 'title contains "Gulliver\'s Travels"'
).
Обратите внимание, что Диск v2 использует title
для имени файла, а Диск v3 использует name
для имени файла. В клиентской библиотеке расширенных служб Apps Script Drive
используется версия v2, поэтому это может быть также синтаксис, используемый службой накопителей (DriveApp
).
Причина, по которой сообщение об ошибке не появляется в строке с searchFiles
, заключается в том, что возвращаемое значение равно FileIterator
, а не фактическим результатам. Этот (и большинство) итераторов лениво оцениваются, и, таким образом, ваш поисковый запрос фактически не выполняется, пока вы не вызовете files.hasNext()
.
Чтобы решить эту проблему, вы должны указать, что нужно искать и как, т.е. предоставить Поле и Оператор , а не только Значение .
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;
}