You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:06:08