【问题标题】:Setting Google Spreadsheet cell values from array, but all values are the same从数组中设置 Google 电子表格单元格值,但所有值都相同
【发布时间】:2023-03-04 22:36:01
【问题描述】:

我正在使用 Google Apps 脚本尝试获取日期数组并将它们粘贴到 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 arrays date google-apps-script google-sheets


    【解决方案1】:

    当您将对象(在本例中为日期对象)推送到数组时,您正在推送对该对象的引用:

    Do objects pushed into an array in javascript deep or shallow copy?

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多