【发布时间】: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