我试图让脚本自动删除日期超过3天(4天)的行
我发现这个脚本我希望能够适应... 函数DeleteOldEntries(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
//give your sheet name below instead of Sheet1
var sheet = ss.getSheetByName("Foglio1");
var datarange = sheet.getDataRange();
var lastrow = datarange.getLastRow();
var currentDate = new Date();
var oneweekago = new Date();
oneweekago.setDate(currentDate.getDate() - 7);
for (i=lastrow;i>=2;i--) {
var tempdate = sheet.getRange(i, 1).getValue();
if(tempdate < oneweekago)
{
sheet.deleteRow(i);
}
}
}
但是脚本本身似乎有一个错误,我需要弄清楚它才能适应4天而不是7天(这部分很容易)
我的工作表有3列,日期在C栏,如果该信息有用
答案 0 :(得分:2)
“C列中的日期,如果该信息有用”
确实如此!而不是试图在A列中获得日期,就像它在这一行中所做的那样:var tempdate = sheet.getRange(i, 1).getValue();
您应该像这样查看C列中的值:
var tempdate = sheet.getRange(i, 3).getValue();
但要提高效率,你应该在数组级别进行这些比较,尝试下面的方法,它会运行得更快......
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Foglio1");
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() - 7);
for (i=lastrow;i>=2;i--) {
var tempdate = values[i-1][2];// arrays are 0 indexed so row1 = values[0] and col3 = [2]
if(tempdate < oneweekago)
{
sheet.deleteRow(i);
}
}
}
答案 1 :(得分:0)
如果您的行按日期排序,最新位于顶部并且您一次删除所有行而不是一次删除所有行,则速度会快得多。
function deleteOldData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("CallHub1");
var datarange = sheet.getDataRange();
var lastrow = datarange.getLastRow();
var values = datarange.getValues();// get all data in a 2D array
var currentDate = new Date();
var daysago = new Date().setDate(currentDate.getDate() - 3);
var yearago = new Date().setDate(currentDate.getDate() - 365);
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 < daysago) {
if(tempdate < yearago) {continue;}
sheet.deleteRows(1, i);
break;
}
}
}