首页 > 解决方案 > appendRow 返回 [Ljava.lang.Object;@ 而不是值

问题描述

我想将表单提交复制到不同的工作表,以便可以编辑复制的数据而不影响原始提交。

我有以下代码:

function copy2(){
  var responses = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("from");
  var tracker =  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("to");
  var lastrow = responses.getLastRow();
  var col = responses.getLastColumn();
  var row = responses.getRange(lastrow, 1, 1, col).getValues();

  tracker.appendRow([null,row[0]]);

使用nullinappendRow可帮助您将信息移至下一列。但是,它不适用于row[0]数组。如果我删除null它可以正常工作,但我希望将信息复制到与第一个不同的列上。

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


为什么是 Ljava.lang.Object?

因为您使用的是用 Java 编写的旧版 Rhino 运行时。因此,当意外发生时,您会看到 GAS 所基于的基础设施。现在,java.lang.object是 Java 中的一个基类,包括数组在内的其他对象都是从该基类派生而来的。

由于appendRow方法签名的唯一参数接受一维值数组row[0],因此包含数组(查看getvalues方法返回什么)的 your 将其作为字符串标记添加到工作表中,表明这是运行时的对象。

在犀牛玩什么?

所有解决方案都依赖于[ null ]作为您的基本数组并使用concat附加第一行的其余部分,如下所示[ null ].concat(row[0]):您还可以使用push简单的for循环以获得更好的性能。

在 V8 0中做什么?

正如提到的另一个答案,您最好的选择是传播语法。您还可以执行 apush(...row[0])来避免连接数组(因为您立即使用并丢弃由 产生的副本[ null, ...row[0] ])。


0请参阅官方文档,了解如何迁移到 V8 以利用新的语言功能并提高速度。


推荐阅读