我有一个表格文件,其中包含一个母版表,该表可以从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);
}
}
}
希望这很有道理。
谢谢。
答案 0 :(得分:0)
在一位计算机科学专业学生的帮助下设法解决了该问题!
请参阅下面的内容是否可以帮助其他人。
//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);