【问题标题】:Delete row if column has date older than one month如果列的日期早于 1 个月,则删除行
【发布时间】:2018-06-11 16:21:18
【问题描述】:

我从https://stackoverflow.com/users/6656050/jeremy-kahan 找到了这段代码,并对其进行了一些编辑。当 L 列中的条目超过一个月时,我需要我的工作表删除任何行,但如果 L 列中的单元格为空,则保留该行,我需要一些指导。根据要求,我可以提供我的工作表副本并展示示例。其他人可能看起来很容易,但我觉得只有 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-apps-script google-sheets delete-row


【解决方案1】:

我会提供一些帮助,即使我会因此受到责备。将来,做一些研究,尝试理解代码并使代码为您的目的工作。如果你做不到,而谷歌也没有帮助,那么来吧,问一个包含所有细节的明确问题。如果所有这些都没有完成,这里的大多数顶级狗甚至都不会看你的问题。此外,请务必在您的问题上使用正确的标签。没有他们,它甚至不会出现在正确的人面前。

现在回答你:

如果 L 列中的日期超过 30 天,您想删除一行。您提供的代码正在查看 C 列的日期。所以这是需要改变的第一件事。其次,条件if ((tempDate!=NaN) &amp;&amp; (tempDate &lt;= currentDate)) 正在检查单元格是否为空(NaN),或者日期是否为 NOT 今天 - 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);
}
}
}

这应该做你想做的事。如果您还有其他问题,请告诉我。我很乐意提供帮助。

【讨论】:

  • 工作得很好,感谢您对发布问题的建议。我今年 16 岁,是这个论坛的新手,还在学习 Java 以供工作,很高兴你能提供帮助,非常感谢。
  • 深入了解代码所做的工作,它还删除了 L 列中的空行,这反过来又删除了不完整的订单,并且该工作表用于整个工作场所的参考,如果你仍然愿意帮助我可以发送一个链接来编辑工作表。
  • 我的错。而不是第 12 行的tempDate!=NaN,它应该是tempDate!=""。这应该可以防止删除空白。你知道如何回到以前的版本来恢复被删除的行吗?
  • 现在效果很好,我确实在几分钟内恢复了旧版本,因为它删除了比预期更多的行。再次感谢您所做的一切!
  • 太棒了!请接受答案,以便其他人可以看到问题已得到解答。
【解决方案2】:
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);
}
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    相关资源
    最近更新 更多