【问题标题】:Delete a row in Google Sheets when a date has passed日期过后删除 Google 表格中的一行
【发布时间】:2026-01-17 00:35:01
【问题描述】:

我有一个电子表格,我想根据日期自动排序,删除重复的行,并在列出的日期已过时删除行。我有自动排序和删除重复项,我只需要根据日期删除行的帮助。它将删除除第 2 行之外的所有行,无论日期如何。

到目前为止我有:

function deleteRow1() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = sheet.getLastRow()-1;   // Number of rows to process
  var dataRange = sheet.getRange(startRow, 2, numRows);

  var data = dataRange.getValues();

  for (i = 0; i < data.length; i++) {
    var row = data[i];
    var date = new Date();
    var sheetDate = new Date(row);
    var Sdate = Utilities.formatDate(date, 'EST-0500', 'MM:dd:yyyy')
    var SsheetDate = Utilities.formatDate(sheetDate, 'EST-0500', 'MM:dd:yyyy')
    if (Sdate > SsheetDate) {
      sheet.deleteRow(i + 2) 
    }
  }
}

【问题讨论】:

  • 您为什么将日期比较为Strings 而不是Dates?请注意 "a" &lt; "b""10" &lt; "2" 都是 true... 另请注意,您的脚本会跳过检查它删除的每一行的行。
  • 您会推荐哪些更改?我不认为我完全遵循...
  • 我认为@tehhowch 正在推动的是摆脱 var sdate 和 var sSheetDate 的行,然后比较 if date>sDate (也许首先考虑一下今天现在比今天晚在午夜)。至少我认为您希望在 mmdd 之前使用 YYYY。此外,从最后一排到第一排感觉更安全,这样世界就不会在你脚下移动。

标签: google-apps-script google-sheets date-comparison


【解决方案1】:

我想,这就是它的样子。我尽可能少地改变你的日常生活,专注于那些看起来令人不安的部分。

特别是,日期与日期进行比较,删除/相等的时间。另外,今天重复构建让我很困扰,所以我把它放在了循环之外。

此外,我自下而上地确保删除不会影响接下来要考虑的行。

    function deleteRow1() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = sheet.getLastRow()-1;   // Number of rows to process
  var dataRange = sheet.getRange(startRow, 2, numRows);

  var data = dataRange.getValues();
  var today = new Date();
  today.setHours(0,0,0,0);
  for (i = data.length-1; i > -1; i--) {
    var row = data[i];
    var sheetDate = new Date(row);
    sheetDate.setHours(0,0,0,0);
    if (today > sheetDate) {
      sheet.deleteRow(i + 2) 
    }
  }


}

将 i+2 更改为 startRow+i 可能会很好。

【讨论】:

  • 不客气。感谢@tehhowch 的设计。如果您满意,请点击复选标记接受答案。