使用谷歌脚本归档今天不存在的表单回复

问题描述

我对编码和尝试为小型组织自动化流程是全新的。员工每天填写一张表格。我正在尝试编写一个脚本,我可以每天早上运行该脚本,该脚本将从不是今天的日期中删除任何回复,并将它们存档在单独的选项卡中。

关键问题是我似乎无法弄清楚如何编写代码,以便:

新日期(); === [表单响应表中的 DATE 值]

当它们是同一天时返回 TRUE。

这些是我正在使用的变量:

var today = new Date();

var todayNoTime = today.setHours(0,0); // 这是对目前无效的修复的尝试

var daterange =comingSheet.getRange(1,1,incomingSheet.getLastRow(),1).getValues(); // 这些都是表单提交的时间戳

然后为了测试我是否已经弄清楚我正在使用以下 for 循环:

for (i=0;i

Logger.log((daterange[i],1));

if (daterange[i][1]===todayNoTime){Logger.log("row" + i + "匹配今天的日期")}else{Logger.log("row " + i + " 不匹配 今天的日期")}

我尝试在每个日期范围内使用 .setHours(0,0)

例如。 daterange[i][1].setHours(0,0);但这不起作用。

我尝试使用 Utilities.formatDate 来匹配 "var today;"到“var daterange;”但时间仍然是个问题。

我在我的工作表中添加了一列,使用 INT() 函数将时间戳日期转换为 google 的 5 位日期值之一,但我不知道如何转换“var today;”自动转换为这 5 位代码之一,以便它每天都可以使用。

任何帮助或想法将不胜感激。

解决方法

如果第一列中的日期早于 n 天,这将删除数据行。它假定日期在 A 列中并且只有一个标题行并且数据从第 2 行开始

function deleteDatesOlderthanNday(n = 15) {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('Sheet1');
  const [hA,...vs] = sh.getDataRange().getValues();
  const dt = new Date();
  const threshold = new Date(dt.getFullYear(),dt.getMonth(),dt.getDate() - n).valueOf();//return milliseconds for midnight n days ago
  let d = 0;
  //entry date is assumed to be in column one or A
  vs.forEach((r,i) => {
    if (new Date(r[0]).valueOf() < threshold) {
      sh.deleteRow(i + 2 - d++);//delete rows that are older than n days
    }
  });
}