从数组设置Google电子表格单元格值,但所有值都是相同的

Setting Google Spreadsheet cell values from array, but all values are the same

本文关键字:设置 数组 Google 电子表格 单元格      更新时间:2023-09-26

我正在使用Google Apps Script来尝试获取日期数组并将它们粘贴到Google电子表格上的单元格中。

我可以将数据放入数组中,当我使用记录器时,我可以看到日期在递增,array.length也在递增。

当我使用. setvalues将数组的内容粘贴到电子表格中时,我在每个单元格中获得相同的值。(代码中的oldestDate只是前面设置的另一个日期变量。它是使用new Date(date string)构造函数创建的,因此是一个有效的日期。

  var today = new Date();
  var testDate = new Date(oldestDate);
  Logger.log(oldestDate);
  Logger.log(testDate);
  Logger.log("Loop Starts");
  var storage = [];
  var cols=0
  while (Date.parse(testDate) < Date.parse(today))
  {
    storage.push(testDate);
    Logger.log(testDate); //This is giving the same output as vvvvv
    Logger.log(storage[cols]); //This is giving the same output as ^^^^^
    Logger.log("Storage Length: "+storage.length); //This is incrementing
    testDate.setDate(testDate.getDate() +1);
    cols++;
  }
  var expensesDump = expenses.getSheetByName("Dump");
  expensesDump.getRange(1, 1, 1, cols).setValues([storage]); //This is populating every cell with "27/05/2013"

当您将一个对象(在本例中是一个日期对象)压入数组时,您正在压入对该对象的引用:

对象推入数组在javascript深或浅复制?

该链接中的第二个答案表明,如果一个新对象被分配给由push()引用的变量,那么它将与先前的push()调用"断开连接"。因此,解决方案可能是(在while循环中):

testDate = new Date(testDate);
testDate.setDate(testDate.getDate()+1);