【问题标题】:How to set values in a bidimensional array?如何在二维数组中设置值?
【发布时间】:2020-06-02 19:50:36
【问题描述】:

首先,对不起我的技能;我的编码背景为零,我只是想修改一个脚本以满足我的需要。

我需要setValues 在两行数据表数据范围内。

当前脚本设置第一行中的值。 我应该如何修改脚本,以便从 2 行中的 4 个值中获取数据?

当前行为:

我的首选行为:

要运行的函数:打印

function Print() {

   SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet").getRange(1, 1, 1, 2).setValues(Data());    

}

function Data() {

    var array = [];

                      var score = "retrieved score";
                      var time = (2+2);
                      var device = "device";
                      var speed = 3+3;

    array.push([score,time]);

    Utilities.sleep(1000);

    return array;
}

【问题讨论】:

  • 扩展您通过getRange() 获得的范围 - 目前,您只能获得第一行、第一列、一行、两列(因此参数为 1,1,1 ,2)
  • 不幸的是,它不起作用。我设置 getRange(1, 1, 2, 2) 然后 array.push([score,time,device,speed]) 但我收到此错误:“数据中的列数与数据中的列数不匹配范围。数据有 1,但范围有 2。"
  • 哦,是的,当然——你需要确保每一行只有两列——目前你创建一个单行两列矩阵,你需要[ [score, time], [device, speed] ]ofc
  • 刚刚更新了这一行:array.push( [[score,time],[device,speed]] ); 但我想我需要重新定义 var 因为var array = []; 似乎是一个单行列矩阵。我没有成功地尝试定义 var :-( .
  • 我的意思是[[ ]]作为一个整体,当然pusharray中应该只有两行,而不是我提到的矩阵。请阅读 push() 方法 works

标签: javascript google-apps-script multidimensional-array google-sheets


【解决方案1】:

问题

尝试将 2 x 2 值矩阵设置为 1 x 2 范围

解决方案

您的值必须与范围的尺寸相匹配。工作表是一个由单元格组成的矩阵:

| |第 1 栏 |第 2 栏 | | ----- | ------------------ | ----- | |第 1 行 | “检索分数” | 4 | |第 2 行 | “设备” | 6 |

二维数组基本相同,外层代表行,内层代表列:

[
  [ "retrieved score", 4 ],
  [ "device", 6 ]
]

因此,通过简单的修改,单元格应该可以正确填充:

function Print() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  const rng = ss.getSheetByName("sheet").getRange(1, 1, 2, 2);

  const values = Data();

  rng.setValues(values);    

}

function Data() {

  var array = [];

  var score = "retrieved score";
  var time = 2+2;
  var device = "device";
  var speed = 3+3;

  array.push([score, time], [device, speed]);

  Utilities.sleep(1000);

  return array;
}

备注

  1. 对我来说,您需要在这里使用sleep() 实用程序方法没有意义。内存数组上的操作是同步的和原子的(setValues 不是这样,因为它是一个 I/O 操作)。

参考文献

  1. push() 方法 reference 在 MDN 上
  2. setValues() 方法 reference

【讨论】:

  • 谢谢,这是最好的。代码不是我的,我不会编码,但我认为 sleep() 存在,因为在实际项目中 setValues 位于循环更改 data 和 range 的打印函数中。因此,也许需要sleep() 才能使这两种功能都发挥作用。有意义吗?
  • @Lolo - 感谢您的反馈。不用担心 - 只是好奇。是的,这是有道理的,但在Data() 中没有,因为它与输入/输出无关(即setValues(),除了给数据库时间来传播更改之外,这是slepp 的主要用途之一) - setValues() 方法将使用Data() 调用的result,所以你要等待整整一秒。它属于 setValues() 调用之后,并且仅当脚本依赖于更改来传播时(但这就是 flush 的用途)
猜你喜欢
  • 2020-02-14
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
  • 2013-12-04
相关资源
最近更新 更多