我们正在使用Google脚本将范围从其他电子表格导入另一个电子表格。 这在过去帮助了我们,但现在数据正在增长,我们需要减少我们导入的数据。 (超时问题)
我们需要在特定列上导入具有特定日期的行。
在这种情况下,正如您在下面的脚本中看到的那样,我们正在从' A1'中导入单元格。到最后一行' N在range
变量中。
我们需要的是在“' H'从该范围日期检查类似于"日期在列K> =今天() - 90"
// iterate all the sheets
sourceSheetNames.forEach(function(sheetName, index) {
if (EXCLUDED_SHEETS.indexOf(sheetName) == -1) {
// get the sheet
var sheet = sourceSpreadSheet.getSheetByName(sheetName);
// selects the range of data that we want to pick. We know that row 1 is the header of the table,
// but we need to calculate which is the last row of the sheet. For that we use getLastRow() function
var lastRow = sheet.getLastRow();
// N is because we want to copy to the N column
var range = sheet.getRange('A1:N' + lastRow);
// get the values
var data = range.getValues();
data.forEach(function(value) {
value.unshift(sheetName);
});
}
});
答案 0 :(得分:0)
我过去通过在电子表格中添加一个新列来解决此问题,该列计算事件发生后 n 天。
=ARRAYFORMULA(IF(ISBLANK(K2:K),"",ROUNDDOWN(K2:K - NOW())))
该功能的核心是倒计时计算。例如,今天是3月1日星期四。从未来的日期减去它,如3月4日星期日,返回一个完整的整数:3。我可以在一个简单的脚本中测试该整数(或任何整数)。
在脚本中,在执行函数的其余部分之前添加条件语句:
// ...
if(someDate === -90) {
// do something...
}
这样,您只需检查单元格的值,而不是在辅助函数中进行计算。唯一的变化(如果你想要更长或更短的间隔)是在条件测试中。
答案 1 :(得分:0)
要有条件地复制符合条件的行,您需要将它们推送到符合条件的新数组。此推送会添加到您现有的data.forEach()
来电中:
...
var now = new Date();
var today = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()));
var kept = [];
var data = range.getValues();
// Add qualifying rows to kept
data.forEach(function(row) {
var colHvalue = row[7];
var colKvalue = row[10];
if( /* your desired test */) {
// Add the name of the sheet as the row's 1st column value.
row.unshift(sheetName);
// Keep this row
kept.push(row);
}
});
/* other stuff with `kept`, like writing it to the new sheet */
您必须实施特定测试,因为您尚未分享时间在H或K列中的存储时间(例如,自纪元以来的天数,iso时间字符串等)。请务必查看Date参考。