You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

提取表格列中“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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:09:47