繁体   English   中英

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

[英]Delete cells based on date but leave formatting

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

根据日期删除单元格

这是代码:

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);
}
}
}

您正在寻找的是.clearContent()而不是deleteRow。 这只会清除单元格的内容,而所有格式保持不变。 这是“ 类范围”文档 ,在查看您可以对工作表中的特定范围进行处理时,它非常有用。

现在,要使它按您希望的方式工作,您将必须对语句使用2,一个用于获取行号(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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM