Google Apps Script中searchFiles查询使用变量报错求助
Google Apps Script 按单元格值搜索Drive文件问题解决
问题描述
我需要根据单元格值搜索指定文件夹内的文件,编写了如下代码:
function aFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName('mysheet'); var folder = DriveApp.getFolderById('1VOnXdSd12XMCMedf4gwdOl8g_CL7VeEYo'); var cell = sheet.getRange("A1"); var value = cell.getValue(); var files = folder.searchFiles("name contains '" + value + "'"); while (files.hasNext()) { var file = files.next(); Logger.log(file.getName); } }
运行时在while循环起始处报错:
Error
Exception: Invalid argument: q
我尝试了多种查询字符串写法,比如:
var searchstring = "\"name contains '" + value + "'\""; // 日志输出:"name contains '20210328-0003-00'"
以及其他引号组合的写法,但都得到相同错误。另外尝试用getFilesByName加通配符:
var files = folder.getFilesByName('*' + value + '*');
没有报错,但找不到目标文件。
问题原因与修复方案
- searchFiles查询语法错误:
searchFiles的查询参数不需要额外包裹引号,你之前的写法给整个查询语句加了外层引号,导致语法无效。正确的查询字符串应该直接是"name contains '" + value + "'",不需要额外的双引号或单引号包裹整个语句。 - file.getName调用错误:
file.getName是方法,必须加括号file.getName()才能正确获取文件名。 - getFilesByName不支持通配符:这个方法只能匹配完整的文件名,不能用
*作为通配符,所以无法实现模糊搜索。
修正后的代码
function searchFilesByCellValue() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName('mysheet'); var folder = DriveApp.getFolderById('1VOnXdSd12XMCMedf4gwdOl8g_CL7VeEYo'); var cellValue = sheet.getRange("A1").getValue().toString(); // 转为字符串避免类型问题 // 正确的查询语句,无需额外外层引号 var files = folder.searchFiles("name contains '" + cellValue + "'"); while (files.hasNext()) { var file = files.next(); Logger.log(file.getName()); // 调用方法需加括号 } }
额外说明
如果你的单元格值包含单引号,需要转义,避免查询语法错误。可以添加转义处理:
var escapedValue = cellValue.replace(/'/g, "\\'"); var files = folder.searchFiles("name contains '" + escapedValue + "'");
内容的提问来源于stack exchange,提问作者Robert M.
相关产品推荐
相关产品推荐

