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

Google apps script 从2天前到15天后过滤CSV数据,google-apps-script,google-sheets,Google Apps Script,Google Sheets,为了不过滤非常旧的数据,我能够完美地调整导入。。。但该文件包含截至2020年5月的数据,对我来说没有价值,并且对电子表格的权重很大 我想将此导入限制为仅在15天后导入数据。其余的不需要 我必须在脚本中添加什么才能使它成为未来的过滤器?提前谢谢 function FiveThirtyEight() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.setActiveSheet(spreadsheet.getSheetBy

为了不过滤非常旧的数据,我能够完美地调整导入。。。但该文件包含截至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%');
}
试试这个:

我发现您当前的代码有几个问题。首先,你的过滤器不工作,因为它没有计算临时日期。我认为破折号是Date()构造函数出现问题的原因。无论如何,我对它做了一些更改,现在通过查看
daysAgo
daysLater
的声明,您可以清楚地看到日期范围。它们在每一行的末尾附近有一个-2和+15,它们控制相对于当前日期的数据的时间跨度

因为我在过滤器循环中跳过了,所以不再需要取消移动()结束标题行。如果返回值为true,则过滤器保留一行;如果返回值为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%');
}
函数FiveThirtyEight(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName(“导入CSV数据”);
var rg=sh.getRange(1,1,sh.getMaxRows(),sh.getMaxColumns());
rg.clear({contentsOnly:true});
变量url=”https://projects.fivethirtyeight.com/soccer-api/club/spi_matches.csv";
var data=UrlFetchApp.fetch(url.getContentText();
var csvA=Utilities.parseCsv(数据);
var now=新日期(新日期().getFullYear(),新日期().getMonth(),新日期().getDate());
var daysAgo=新日期(now.getFullYear(),now.getMonth()+1,now.getDate()-2);
var daysLater=新日期(now.getFullYear(),now.getMonth()+1,now.getDate()+15);
变量值=csvA.filter(函数(e,i){
如果(i>0){
var tA=e[0]。拆分('-');//在短划线上拆分以获取完整的年份、月份和日期
var temp=新日期(tA[0],tA[1],tA[2]);

return temp.getTime()>=daysAgo.getTime()&&temp.getTime()我相信现在它会将昨天和今天的数据加载到活动工作表中。正确吗?非常感谢您的关注,我现在就做测试!