如果列的日期早于一个月,则删除行

Delete row if column has date older than one month

我从 https://whosebug.com/users/6656050/jeremy-kahan 中找到了这段代码并对其进行了一些编辑。当 L 列中的条目超过一个月时,我需要 sheet 删除任何行,但如果 L 列中的单元格为空,则保留该行我需要一些指导。根据要求,我可以提供我的 sheet 的副本并展示示例。这对其他人来说似乎很容易,但我觉得自己处于劣势,只有 16 岁,刚刚学习 java.

function DeleteOldEntries() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");//assumes Sheet 1 is the name of the sheet
var datarange = sheet.getDataRange();
var lastrow = datarange.getLastRow();
var values = datarange.getValues();// get all data in a 2D array

var currentDate = new Date();//today
var monthOld = Date.now() + -30*24*3600*1000; 
for (i=lastrow;i>=3;i--) {
var tempDate = values[i-1][11];// arrays are 0 indexed so row1 = values[0] and col12 = [11]
if  (tempDate <= (monthOld))
{
  sheet.deleteRow(i);
}

}

我会提供一些帮助,即使我会因此受到惩罚。将来,做一些研究,尝试理解代码并使代码为您的目的工作。如果你不能,并且 Google 没有帮助,那么来问一个清楚的问题,并提供所有细节。如果所有这些都没有完成,这里的大多数顶级狗甚至不会看你的问题。另外,一定要在你的问题上使用正确的标签。没有他们,它甚至不会出现在正确的人面前。

现在回答您的问题:

如果 L 列中的日期超过 30 天,您想删除一行。您提供的代码正在查看日期的 C 列。所以这是首先需要改变的。其次,条件 if ((tempDate!=NaN) && (tempDate <= currentDate)) 正在检查单元格是否为空 (NaN),或者日期是否为 <= TODAY,NOT today - 30。因此,您需要一种方法来计算今天 - 30 天是什么:var monthOld = Date.now() + -30*24*3600*1000;,然后您可以将其与 L 列中的日期进行比较。

如果您进行这两项更改,您将获得:

function DeleteOldEntries() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Live Events");//assumes Live Events is the name of the sheet
var datarange = sheet.getDataRange();
var lastrow = datarange.getLastRow();
var values = datarange.getValues();// get all data in a 2D array

var currentDate = new Date();//today
var monthOld = Date.now() + -30*24*3600*1000; 
for (i=lastrow;i>=3;i--) {
var tempDate = values[i-1][11];// arrays are 0 indexed so row1 = 
values[0] and col12 = [11]
if ((tempDate!=NaN) && (tempDate <= (monthOld)))
{
  sheet.deleteRow(i);
}
}
}

这应该可以满足您的要求。如果您有任何其他问题,请告诉我。我很乐意提供帮助。

function DeleteOldEntries() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");//assumes Sheet 1 is the name of the sheet
var datarange = sheet.getDataRange();
var lastrow = datarange.getLastRow();
var values = datarange.getValues();// get all data in a 2D array

var currentDate = new Date();//today
var monthOld = Date.now() + -30*24*3600*1000; //to change amount of days adjust "30"
for (i=lastrow;i>=3;i--) {
var tempDate = values[i-1][11];// arrays are 0 indexed so row1 = values[0] and col12 = [11]
if ((tempDate!="") && (tempDate <= (monthOld)))
{
  sheet.deleteRow(i);
}
}
}