从2天前到15天后过滤CSV数据

时间:2019-09-19 15:09:18

标签: google-apps-script google-sheets

为了不过滤非常旧的数据,我能够完美地调整导入...但是文件中包含的数据截止到2020年5月,对我来说没有任何价值,而且电子表格的重量也很大。

我想将此导入限制为仅从现在起15天之内。其余的不需要。

我必须在脚本中添加什么才能使它成为将来的过滤器?预先感谢

function FiveThirtyEight() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Import CSV Data'), true);
  var sheet = spreadsheet.getActiveSheet();
  sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});

  var url = "https://projects.fivethirtyeight.com/soccer-api/club/spi_matches.csv";
  var data = UrlFetchApp.fetch(url).getContentText();
  var csv = Utilities.parseCsv(data);
  var MILLIS_PER_DAY = 1000 * 60 * 60 * 24 * 2;
  var now = new Date();
  now.setHours(0,0,0,0);
  var yesterday = new Date(now.getTime() - MILLIS_PER_DAY);
  var values = csv.filter(function(e, i) {
    var temp = new Date(e[0]);
    temp.setHours(0,0,0,0);
    return i > 0 && temp.getTime() >= yesterday;
  });
  values.unshift(csv[0]);
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(1, 1, values.length, values[0].length).setValues(values);

  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('Import CSV Data!H:J').activate();
  spreadsheet.getActiveRangeList().setNumberFormat('0.00%');
}

1 个答案:

答案 0 :(得分:0)

尝试一下:

我发现您当前的代码有几个问题。一方面,您的过滤器无法正常工作,因为它没有计算临时日期。我认为破折号给Date()构造函数带来了问题。无论如何,我对其进行了几处更改,现在您可以通过查看daysAgodaysLater的声明来清楚地看到日期范围。它们在每行的结尾处都有-2和+15,它们可以控制相对于当前日期的数据时间跨度。

您不再需要unshift()结束标题行,因为我跳过了过滤器循环。如果return为true,则过滤器保留一行;如果return为false,则过滤器将删除一行。

此外,您根本不需要使用activate()。我认为这是用户开始从宏中学习代码的残余。

function FiveThirtyEight() {
  var ss = SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Import CSV Data');
  var rg=sh.getRange(1, 1, sh.getMaxRows(), sh.getMaxColumns());
  rg.clear({contentsOnly:true});
  var url="https://projects.fivethirtyeight.com/soccer-api/club/spi_matches.csv";
  var data=UrlFetchApp.fetch(url).getContentText();
  var csvA=Utilities.parseCsv(data);
  var now=new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate());
  var daysAgo=new Date(now.getFullYear(),now.getMonth()+1,now.getDate()-2);
  var daysLater=new Date(now.getFullYear(),now.getMonth()+1,now.getDate()+15);
  var values=csvA.filter(function(e, i) {
    if(i>0) {
    var tA=e[0].split('-');//split on dashes to get FullYear,month and date
    var temp=new Date(tA[0],tA[1],tA[2]);
    return temp.getTime() >= daysAgo.getTime() && temp.getTime()<=daysLater.getTime();//this keeps data within the desired date range
    }else{
      return true;
    }
  });
  sh.getRange(1, 1, values.length, values[0].length).setValues(values);
  sh.getRange('Import CSV Data!H:J').setNumberFormat('0.00%');
}