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

Google Script数组赋值报错:无法将Array转换为Object[][]

解决Google Script中数组维度不匹配导致的Cannot convert Array to Object[][]错误

你精准定位了问题根源——其他列通过getValues()返回的是二维数组(每个值都被包裹在子数组里,比如[[A1], [A2]]),但手动生成的工作表名称列是一维数组(直接是[SheetName, SheetName]),这种维度不一致会触发Google Sheets API的类型错误。

核心修复思路

把一维的工作表名称数组转换成和其他列一致的二维格式,也就是让每个工作表名称都被包裹在单独的子数组中(比如[[SheetName], [SheetName]]),同时还要修正代码里的一个逻辑错误。

修改后的完整代码

function getColValues(label,sheetName) {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var colIndex = getColumnIndex(label, sheetName);
  var numRows = ss.getLastRow() - 1;
  var colValues = [];

  if (colIndex > 0 ) {
    colValues = ss.getRange(2, colIndex, numRows, 1).getValues();
  } else if (label === "orginalsheet") { // 这里修正为严格相等判断,之前的=是赋值操作
    // 生成二维数组,每个元素是包含工作表名称的子数组
    for (var i = 0; i < numRows; i++) {
      colValues.push([sheetName]);
    }
  }
  // 空数组的情况无需额外处理,默认已初始化

  Logger.log(colValues);
  return colValues;
}

关键修改点说明

  1. 修正条件判断逻辑:原来的colIndex = "orginalsheet"是赋值语句,不是比较判断,这会导致逻辑完全错误。应该用label === "orginalsheet"来判断是否需要生成溯源列。
  2. 统一数组维度:通过push([sheetName])的方式,把每个工作表名称都包装成子数组,确保返回的colValues始终是二维数组,和getValues()的输出格式完全对齐。
  3. 简化变量声明:提前初始化colValues为空数组,避免重复声明变量导致的冗余。

修改完成后,你可以通过Logger.log查看输出的数组结构,现在所有列的数组格式都会是一致的二维结构,合并后写入主工作表时就不会再触发维度不匹配的错误了。

内容的提问来源于stack exchange,提问作者Jerome Learman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:16:46