为了不过滤非常旧的数据,我能够完美地调整导入...但是文件中包含的数据截止到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%');
}
答案 0 :(得分:0)
尝试一下:
我发现您当前的代码有几个问题。一方面,您的过滤器无法正常工作,因为它没有计算临时日期。我认为破折号给Date()构造函数带来了问题。无论如何,我对其进行了几处更改,现在您可以通过查看daysAgo
和daysLater
的声明来清楚地看到日期范围。它们在每行的结尾处都有-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%');
}