根据日期删除单元格,但保留格式

时间:2019-05-02 14:42:11

标签: google-apps-script google-sheets

我从询问的“基于日期删除单元格”问题中获得了此脚本。它删除实际行,从而删除所有格式和变量。有没有办法让它只是删除值?

Delete Cells Based on Date

这是代码:

function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Field1");
var datarange = sheet.getDataRange();
var lastrow = datarange.getLastRow();
var values = datarange.getValues();// get all data in a 2D array

var currentDate = new Date();
var oneweekago = new Date();
oneweekago.setDate(currentDate.getDate() - 1);

for (i=lastrow;i>=2;i--) {
var tempdate = values[i-1][0];// arrays are 0 indexed so row1 = values[0] 
and col3 = [2]

 if(tempdate < oneweekago)  
{
  sheet.deleteRow(i);
}
}
}

1 个答案:

答案 0 :(得分:0)

您要查找的是.clearContent()而不是deleteRow。这只会清除单元格的内容,而所有格式保持不变。这是Class Range documentation,在查看工作表中特定范围的功能时非常有用。

现在要使它按您想要的方式工作,您将必须使用2个for语句,一个用于获取行号(i),另一个用于获取列号(j),然后您可以在.getRange中使用来运行.clearContent()。

function clearOldRecords() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Field1");
  var dataRange = sheet.getDataRange();
  var lastRow = dataRange.getLastRow();
  var data = dataRange.getValues();

  var currentDate = new Date();
  var oneWeekAgo = new Date();
  oneWeekAgo.setDate(currentDate.getDate() - 7);

  for (var i = 0; i < data.length; i++) {
    for (var j = 0; j < data[i].length; j++) {
    var tempDate= data[i][0]; //column number is indexed from 0, change accordingly to your data

      //if start date column is older than 7 days, clear the content of the row
      if (tempDate!= "" && tempDate < oneWeekAgo) {
        sheet.getRange(i+1,j+1).clearContent();
      }
    }
  }
}

因此,为了进一步解释,这些是我对脚本进行的显着更改。

日期减去要在几天内计算出来,因此执行-1只会比日期少1天。您需要一个星期,所以我将其更改为-7:

oneWeekAgo.setDate(currentDate.getDate() - 7);

该脚本也不再扫描工作表的最后一行,如果工作表很大,这可能会影响性能,但是在您的正常日常工作表中,这应该不是问题。

正如您在下面看到的,for循环for i获取所有行号,并且for循环j可以用作列号,如您在尝试清除内容时在getRange()中看到的那样:

sheet.getRange(i+1,j+1).clearContent();

注意::如果未按日期对数据进行排序,这可能会在数据中留下很大的空白,您可以添加类似的内容对其进行排序(将其放入FOR循环之外):

sheet.getRange('A1:Z').sort({column: 2, ascending: false}) //change column number accordingly, this is NOT indexed from 0