Google Apps Script中appendRow输出对象地址而非单元格值问题求助
问题原因分析
你看到的[Ljava.lang.Object;@536f3e11其实是Java数组的默认字符串标识,核心问题在于你传给appendRow()的不是它需要的一维数组,而是一个嵌套数组。
为啥会出现这种情况?因为getRange('A2:AP2').getValues()返回的是二维数组——哪怕你只选中了一行,它的结构也是[[单元格A2值, 单元格B2值, ..., 单元格AP2值]],是一个包裹着单个一维数组的数组。
你现在的代码把这个二维数组直接push到array里,导致array变成了[[[A2值, B2值, ...]]](三层嵌套),appendRow()根本无法解析这种结构,所以只能输出数组对象的内存地址字符串。
修复方案
有两种简单的修复方式,选哪种都可以:
方式1:直接提取一维数组
既然getValues()返回的二维数组里只有一行,我们直接取第一行(索引0)的一维数组即可:
var p1ScoreCalc = p1Sheet.getRange('A2:AP2').getValues()[0]; // 直接获取第一行的一维数组 var array = [] //---Checks if submit is checked--\ if(submitCheck == 1){ //---Checks for what player is submitting---\ if(playerCheck === "P1"){ testSheet.appendRow(p1ScoreCalc); // 传入一维数组即可正常写入 } }
方式2:展开嵌套数组到你的array中
如果你需要保留array变量做后续操作,可以用展开运算符把二维数组里的元素拆出来:
var p1ScoreCalc = p1Sheet.getRange('A2:AP2').getValues(); //---Array for score records---\ var array = [] //---Checks if submit is checked--\ if(submitCheck == 1){ //---Checks for what player is submitting---\ if(playerCheck === "P1"){ array.push(...p1ScoreCalc[0]); // 把一维数组的所有元素展开添加到array testSheet.appendRow(array); } }
验证小技巧
以后遇到数组相关的问题,可以用Logger.log(p1ScoreCalc)打印数组结构,你会清晰看到它是二维的,这样就能快速定位问题啦。
内容的提问来源于stack exchange,提问作者kaitlynmm569
相关产品推荐
相关产品推荐

