首页 > 解决方案 > Google Scripts - 根据日期从表格中删除信息

问题描述

我有一个表格文档,其中有一个从 Google 表单获取其信息的主表格。我目前有一个脚本可以在每个月的 1 日复制主表,然后将该表命名为前一个月。

然后我想要做的是获取新表以删除上个月之前的所有数据。例如,在 11 月 1 日,脚本将运行,它将复制主幻灯片并将工作表命名为 Oct-18。然后我希望它删除 10 月之前的所有数据,以便它纯粹是 10 月的一张数据。

我工作表上的 A 列是表单输入的时间戳,其中包含日期和时间。

我当前复制和重命名工作表的脚本如下,我尝试添加的第二部分是倒计时 32 天并删除那天之前的所有内容的部分,但是我遇到的问题是工作表的名称根据脚本的第一部分进行更改,所以我不知道如何让脚本找到新创建的和可变命名的工作表,然后从中删除旧数据。在它被命名为“Sheet”的地方,我需要将它命名为我们刚刚创建的工作表。(我会倒数 32 天,以便涵盖所有月份,这不是理想的解决方案,因为它最终会稍微扭曲数据,但主要是我需要弄清楚如何获取可变数据)。

我能想到的唯一另一种方法是获取昨天的日期并尝试让它选择月份,然后在该月的第一天和昨天的日期之间搜索并删除该范围之外的所有内容。

    // Duplicate & Rename
    function Duplicate() {
    var ss = SpreadsheetApp.getActiveSpreadsheet()
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var tz = ss.getSpreadsheetTimeZone();
    var now = new Date();
    var yesterday = new Date();
    yesterday.setDate(now.getDate()-1);
    var date = Utilities.formatDate(yesterday, tz, 'MMM-YY');
    ss.getSheetByName('Log')
    .copyTo(ss)
    .setName(date)
        .getRange(1,1000)
        .getValue()

    }

    // Delete Old Data
    {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName("Sheet1");
    var datarange = sheet.getRange(1,1000);
    var values = datarange.getValues();

    var currentDate = new Date();
    var onemonthago = new Date();
    onemonthago.setDate(currentDate.getDate() - 32);

    for (i=lastrow;i>=2;i--) {
    var tempdate = values[i-1][2];

    if(tempdate < onemonthago)  
    {
    sheet.deleteRow(i);
    }
    }
    }

希望这是有道理的。

提前致谢。

标签: google-apps-scriptgoogle-sheetsscripting

解决方案


在我们的一位计算机科学专业学生的帮助下设法解决了这个问题!

如果这可以帮助其他人,请参见下文。

//Delete Old Data
var sheet = ss.getSheetByName(date);
var datarange = sheet.getRange(1,1,sheet.getLastRow());
var values = datarange.getValues();

var currentDate = new Date();
var onemonthago = new Date();
onemonthago.setDate(currentDate.getDate() - 32);

for (i=sheet.getLastRow();i>=2;i--) {

var tempdate = values[i-1];

if(new Date(tempdate) < onemonthago)  
{
  sheet.deleteRow(i);

推荐阅读