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; }
关键修改点说明
- 修正条件判断逻辑:原来的
colIndex = "orginalsheet"是赋值语句,不是比较判断,这会导致逻辑完全错误。应该用label === "orginalsheet"来判断是否需要生成溯源列。 - 统一数组维度:通过
push([sheetName])的方式,把每个工作表名称都包装成子数组,确保返回的colValues始终是二维数组,和getValues()的输出格式完全对齐。 - 简化变量声明:提前初始化
colValues为空数组,避免重复声明变量导致的冗余。
修改完成后,你可以通过Logger.log查看输出的数组结构,现在所有列的数组格式都会是一致的二维结构,合并后写入主工作表时就不会再触发维度不匹配的错误了。
内容的提问来源于stack exchange,提问作者Jerome Learman
相关产品推荐
相关产品推荐

