App Scripts(JS)追加范围值到列表出现[Ljava.lang.Object;@xxx错误如何解决
问题根因
getValues()方法返回二维数组,结构为[[行1列1值, 行1列2值...], [行2列1值...]],原代码循环中push(cell)是把循环索引推入数组,而非实际读取的单元格值appendRow()要求传入一维数组,每个元素对应新行的一个单元格。原代码把tickerprice整个数组作为第二个元素传入,等于在单元格中嵌入了数组对象,Google Apps Script底层基于Java运行,数组对象转字符串时就会输出[Ljava.lang.Object;@xxx这类Java对象内存地址- 额外问题:原代码取范围
getRange(3,1)仅读取第3行第1列单个单元格,tickervalue长度固定为1,遍历逻辑没有实际作用
修复方案
如果需求为:读取PORTFOLIO表A列第3行开始的所有行情值,在HISTORIC_TICKER表新增一行,第一列存当前日期,后续列依次存入各行情值,修复后代码如下:
function record_ticker(){ var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('PORTFOLIO'); var date = new Date(); var tickerprice = []; // 调整范围读取逻辑:获取A列第3行到最后一个有值行的所有内容 var lastRow = sheet.getLastRow(); var tickervalue = sheet.getRange(3, 1, lastRow - 2, 1).getValues(); for (var cell = 0; cell < tickervalue.length; cell++){ // 读取二维数组中的实际单元格值存入数组 tickerprice.push(tickervalue[cell][0]); } var dest = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('HISTORIC_TICKER'); // 拼接为一维数组传入appendRow dest.appendRow([date, ...tickerprice]); // 若运行环境不支持ES6展开语法,可替换为下面的写法 // dest.appendRow([date].concat(tickerprice)); }
如果需求是每个行情值单独存为一行,只需要调整写入逻辑,把appendRow放到循环内即可。
内容的提问来源于stack exchange,提问作者Lash
相关产品推荐
相关产品推荐

