提取表格列中“No”值时遇setValues方法错误求助
解决 "Cannot find method setValues(string)" 错误
这个错误的核心原因很明确:Google Apps Script里的setValues()方法必须接收二维数组作为参数,而你传入的是单个字符串(或者一维数组),所以触发了方法不存在的报错——虽然你的Logger输出看起来正确,但Logger可以打印任意类型的数据,而setValues()对参数格式有严格要求。
问题重现与修正思路
你要提取Drivers列(C2:C40)中值为"No"的对应Names(B2:B40),然后写入rides表。首先需要把筛选后的结果整理成符合要求的二维数组,再调用setValues()。
修正后的代码示例
function rides() { // 打开源表格 var sourceSpreadsheet = SpreadsheetApp.openById("1fRc20zW1j...."); // 获取源工作表 var masterSheet = sourceSpreadsheet.getSheetByName('Master'); var ridesSheet = sourceSpreadsheet.getSheetByName('rides'); // 获取数据(注意getValues()返回二维数组) var driversData = masterSheet.getRange('C2:C40').getValues(); var namesData = masterSheet.getRange('B2:B40').getValues(); // 筛选值为"No"的对应姓名,整理成二维数组 var filteredNames = []; for (var i = 0; i < driversData.length; i++) { if (driversData[i][0] === "No") { // 二维数组取单个值要加[0] filteredNames.push([namesData[i][0]]); // 每个元素包装成数组,保持二维结构 } } // 写入rides表(注意要匹配数组的行数和列数,这里是单列,所以列数1) if (filteredNames.length > 0) { ridesSheet.getRange(ridesSheet.getLastRow() + 1, 1, filteredNames.length, 1).setValues(filteredNames); } else { Logger.log("没有找到值为'No'的记录"); } }
关键注意点
getValues()返回的是二维数组,即使是单列数据,也是[[值1], [值2], ...]的结构,所以取单个元素时要用array[i][0]。setValues()的参数必须和写入区域的行列数完全匹配:比如你要写入n行1列,参数就得是n个长度为1的数组组成的二维数组。- 如果直接把筛选后的姓名拼成字符串或者一维数组(比如
["张三", "李四"]),传入setValues()就会触发你遇到的错误,必须包装成[["张三"], ["李四"]]这种结构。
内容的提问来源于stack exchange,提问作者POGINA
相关产品推荐
相关产品推荐

