【问题标题】:Google Scripts - Deleting information from Sheets based on dateGoogle Scripts - 根据日期从表格中删除信息
【发布时间】:2018-10-18 21:08:03
【问题描述】:

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

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

我的工作表上的A列是Forms输入的时间戳,里面有日期和时间。

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

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

    // 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);
    }
    }
    }

希望这是有道理的。

提前致谢。

【问题讨论】:

  • 只是我理解的一个建议,因为您每月运行一次脚本,所以只需处理主表的数据数组即可获取上个月1日开始的数据。您可以轻松地遍历数组并添加 if 条件以仅在日期列值大于上个月 1 日时才收集数据。之后在工作表中设置数组。这将减少将整个数据添加到新工作表然后将其删除的开销。此外,它将节省大量运行时间。希望这看起来可行。

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


【解决方案1】:

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

看看下面这是否可以帮助其他人。

//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);

【讨论】:

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