Google Script批量写入JSON数据至谷歌表格遇行数不匹配异常求助
解决Google Script批量写入表格的行数不匹配异常
错误原因
你的代码中,myarray已经是符合setValues要求的二维数组(结构为[[列1值, 列2值...], [第二行列值...]]),但调用setValues([myarray])时多嵌套了一层数组,导致数据变成三维结构[[[行1数据], [行2数据]]]。此时数据的行数为1(外层数组的长度),而目标范围IA3:IG11对应9行,因此触发行数不匹配的异常。
修复步骤
- 移除多余的数组嵌套:将
setValues([myarray])改为setValues(myarray),直接传入已构建好的二维数组。 - 补全异常行的空数据:如果循环中捕获到异常,
myarray的长度会小于9,写入时仍会报错。需要在catch块中添加对应长度的空数组,保证myarray的行数与目标范围一致。 - 简化冗余代码:不需要
parti对象,直接构建行数据并push到数组,减少不必要的变量操作。
修正后的完整代码
var myarray = []; // 循环9行(b从3到11,共9次) for (var b = 3; b < 12; b++) { var cellvalue = sh.getRange('HS' + b).getValue(); try { // 直接构建当前行的一维数组 var rowData = [ data[cellvalue]._genes.cls, data[cellvalue]._genes.eyes.d.partId, data[cellvalue]._genes.ears.d.partId, data[cellvalue]._genes.back.d.partId, data[cellvalue]._genes.mouth.d.partId, data[cellvalue]._genes.horn.d.partId, data[cellvalue]._genes.tail.d.partId ]; myarray.push(rowData); } catch (e) { console.log(e); // 异常时插入7列空值,保证行数匹配(目标范围是IA到IG共7列) myarray.push(new Array(7).fill('')); } } // 直接传入myarray,无需额外嵌套 sh.getRange('IA3:IG11').setValues(myarray);
关键说明
setValues要求传入的必须是二维数组,外层数组对应行,内层数组对应列,结构必须与目标范围的行列数完全匹配。- 目标范围
IA3:IG11是9行×7列,因此myarray必须是包含9个一维数组的二维数组,每个一维数组包含7个元素。
内容的提问来源于stack exchange,提问作者Lorenzo Pimps
相关产品推荐
相关产品推荐

