Google Apps脚本 - 如果今天的日期是输入日期,则删除一行

时间:2015-04-01 03:25:17

标签: google-apps-script google-sheets

我想创建一个脚本,将一行中的日期与今天的日期进行比较,如果今天的日期是粘贴日期行,则删除该行。

这是我目前的剧本:

    function deleteRow1() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 1;  // First row of data to process
var numRows = sheet.getLastRow()-1;   // Number of rows to process
var dataRange = sheet.getRange(startRow, 2, numRows);
// Fetch values for each row in the Range.
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,'GMT+0200','yyyy:MM:dd')
 var SsheetDate = Utilities.formatDate(sheetDate,'GMT+0200', 'yyyy:MM:dd')
        if (Sdate > SsheetDate){
          sheet.deleteRow(i+2) //don't delete header
}
}
}

最终目标是将C列中的日期与今天的日期进行比较,并在今天的日期更长时删除该特定行。

现在,当我运行脚本时,它会删除一些行,但不会特别删除早于今天的行。

此脚本的开头是based off another StackOverflow post

1 个答案:

答案 0 :(得分:1)

当你从上到下开始迭代时,在迭代中删除行,改变下一行的偏移量(实际行号)

上面的问题可以通过从下到上开始迭代来解决。

for (i=data.length-1;i>=0;i--) 

这是工作代码

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);
    // Fetch values for each row in the Range.
    var data = dataRange.getValues();

    for (i=data.length-1;i>=0;i--) 
    {
          var row = data[i];
          var date = new Date();
          var sheetDate = new Date(row);
          var Sdate = Utilities.formatDate(date,'GMT+0200','yyyy:MM:dd')
          var SsheetDate = Utilities.formatDate(sheetDate,'GMT+0200', 'yyyy:MM:dd')
          if (Sdate.valueOf() > SsheetDate.valueOf())
          {
                sheet.deleteRow(i+2) //don't delete header
          }
    }
 }