Google Script调用setValues时同外观数组一个正常一个报列数不匹配问题
问题根源
日志输出一致是Logger的打印机制导致的假象,两个数组的实际结构完全不同:
tmpArr的实际结构是[[ "Trip_Number, Miles, Empty_Miles, Temp" ]]:内层数组长度为1,仅存储了1个拼接生成的长字符串,对应1列数据,和你指定的4列范围不匹配,所以触发报错。tstArr的实际结构是[["Trip_Number", "Miles", "Empty_Miles", "Temp"]]:内层数组长度为4,每个元素是独立的字符串,刚好对应4列数据,所以可以正常运行。
修复方案
不要做字符串拼接操作,直接构造符合要求的二维数组即可,修改后的代码如下:
var tmpArr = []; var rowVals = []; // 存储单行的4个列值 for (i = 0; i < 4; i++) { rowVals.push(myVars[i][myCol]); // 直接添加单个值,不做字符串拼接 } tmpArr.push(rowVals); // 将单行数组放到外层结构中 Logger.log('Contents of tmpArr are on next line.'); Logger.log(tmpArr); var tstArr = [["Trip_Number", "Miles", "Empty_Miles", "Temp"]]; Logger.log('Contents of tstArr are on next line'); Logger.log(tstArr); wsDB.getRange(1,1,1,4).setValues(tmpArr);
如果确实需要保留之前的字符串拼接逻辑,也可以将拼接后的字符串按逗号分割为数组再使用(不推荐,若值本身包含逗号会导致拆分错误):
tmpArr.push(tmpArrVals.split(", "));
内容的提问来源于stack exchange,提问作者RaifMT
相关产品推荐
相关产品推荐

