【问题标题】:Paste the values for each column until the today's date google apps scripts将每列的值粘贴到今天的日期 google apps 脚本
【发布时间】:2020-07-08 09:20:07
【问题描述】:

我有这张表,有一些与其他表链接的信息,几乎所有的行都有公式(你可以在图片上找到)。

我更新其他选项卡上的信息,并使用公式,值和信息粘贴在行中,但我每天更新,所以我需要复制/粘贴值直到今天在此选项卡内选择列,然后粘贴值。

如图所示,从 7 月 2 日(列)开始,我有公式,而在我只有值的前几天,我想让脚本将信息粘贴到今天。

这是脚本,我开始打开电子表格,然后转到选项卡,获取值的范围。

日期代表我有日期的第 5 行,而今天的日期代表今天的日期。

我的问题是遍历每一列并粘贴值。我想将 A 列中的值粘贴到具有今天日期的列。

我发现我认为可以用来复制/粘贴值,但我不知道如何在不使用数字的情况下访问不同的列。

在循环中,我考虑了第 5 行的日期并与今天的日期进行比较以打破它。

  var sheet =  SpreadsheetApp.openById("...");
  var ss    = sheet.getSheetByName("Reporting");
  var rows = ss.getDataRange().getValues();
  var dates = rows[5]
    
  var today = new Date();
  var todaydate = today;
  Logger.log(columns)
  
  
  for(var i = 1; i < dates.lenght; i++) {
  if (dates[i]==todaydate)
  break;
  }

【问题讨论】:

  • 您要仅复制今天的列还是从column A 开始并以与today 对应的列结束的所有列?
  • @ziganotschka,所有列从 A 列开始,直到我们今天拥有的列!!!我试图按数字取列,但我不知道该怎么做

标签: google-apps-script google-sheets google-sheets-formula


【解决方案1】:

正确比较日期很重要

  • new Date() 将为您提供一个具有日期和时间戳的日期对象,因为您在工作表中的日期的时间戳默认为 00:00:000,您需要将这部分排除在比较之外。
  • 为此,您可以例如仅将日期和月份与 getDate()getMonth() 进行比较
  • 找到正确的日期后,使用其索引来查找正确的列
  • 您的代码有一些小错误,例如索引 - 请记住,数组索引始终以 0 开头,而不是以 1 开头!

修改后的示例:

function myFunction() {
  var ss =  SpreadsheetApp.openById("...");
  var sheet    = ss.getSheetByName("Reporting");
  var rows = sheet.getDataRange().getValues();
  //arrays start with [0] - the 5th row in the sheet corresponds to rows[4]
  var dates = rows[4];
  var column;
  var today = new Date();

  for(var i = 0; i < dates.length; i++) {
    if (dates[i].getDate() == today.getDate() && dates[i].getMonth() == today.getMonth() ){
      column = i+1;
      break;
    }
  }
  var sheet2 = ss.getSheetByName("Sheet2");
    //modify "A1" to your actual start range
  sheet.getRange(1,1,sheet.getLastRow(), column).copyTo(sheet2.getRange("A1"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
}

【讨论】:

  • 非常感谢!!真的很有帮助,我会试试的,还有一个疑问,是否可以在同一个选项卡中复制/粘贴?只是想知道它。
  • 当然可以,但在这种情况下您可能会覆盖您的数据。
  • 如果可能的话,对我来说是一个更好的选择,以避免在我的工作表上创建其他选项卡!
  • 在这种情况下,只需将sheet2.getRange("A1") 替换为sheet.getRange("A1")。旁注:如果您想要用固定值替换公式,您也可以使用 getValues()...setValues() 代替 oc copyTo()
  • 完美,已经完美运行!!!我发现我做的一个错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-04
  • 1970-01-01
  • 2018-07-08
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多