Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据相邻行中的日期删除行_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 根据相邻行中的日期删除行

Javascript 根据相邻行中的日期删除行,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我的工作表第五栏有日期 function deleteOldData() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("Sheet1"); var datarange = sheet.getDataRange(); var lastrow = datarange.getLastRow(); var values = datarange.get

我的工作表第五栏有日期

function deleteOldData() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Sheet1");
  var datarange = sheet.getDataRange();
  var lastrow = datarange.getLastRow();
  var values = datarange.getValues();

  var currentDate = new Date();
  var daysago = new Date().setDate(currentDate.getDate() - 5);
  daysago = new Date(Date.parse(daysago))
  Logger.log(daysago)


  for (i=lastrow;i>=2;i--) {
var tempdate = sheet.getRange(i, 5).getValue();
if(tempdate < daysago)  {
      sheet.deleteRows(2, i);
      break;
    }
  }
}
答复: 您需要使用
deleteRow()
而不是
deleteRows()

更多信息: 根据:

deleteRows(行位置,行数)

从给定行位置开始删除多行

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
// Rows start at "1" - this deletes the first two rows
sheet.deleteRows(1, 2);
因此,当您调用
sheet.deleteRows(2,i)时
您正在删除多行,从第2行开始,稍后再完成
i
行-可能高达
lastrow

代码修改: 您也不需要使用
break
关键字-这将在第一次满足
条件时停止整个循环,并且不会继续删除日期超过五天前的所有行

我还稍微整理了一下函数:

  • 由于您已经从工作表中获取数据并将其存储在
    值中
    ,因此无需再次获取
    tempdate
    的数据-您可以直接从
    值数组中分配数据
  • 为了使日期比较更精确,可以从日期对象中提取准确的时间戳,而不是使用
    getDate()-5
    等:
函数deleteOldData(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getSheetByName(“Sheet1”);
var datarange=sheet.getDataRange();
var lastrow=datarange.getLastRow();
var values=datarange.getValues();
var currentDate=new Date().getTime();
var daysago=(new Date().getTime()-432000000);
对于(var i=lastrow;i>1;i--){
var tempdate=数值[i-1][4];
if((新日期(tempdate).getTime())
我希望这对你有帮助

参考资料:

什么是432000000?
.getTime()将日期转换为毫秒-432000000是5天内的毫秒数:)
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
// Rows start at "1" - this deletes the first two rows
sheet.deleteRows(1, 2);