建议
也许您可以尝试以下实现:
脚本:
function getDynamicRow(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('B.Wioski');
var sourceRange = sheet.getRange('A1:F'+sheet.getLastRow());
var data = sourceRange.getValues(); // Array of arrays [[Row1],[Row1],[Row3]]
data.push(["","","","","",new Date()]); //added a timestamp for reference on deleting older data
// add data to next empty row in the static sheet.
var targetSheet = ss.getSheetByName('TW');
var currentCol = targetSheet.getDataRange().getNumColumns();
if(currentCol != 1)currentCol = currentCol+1;
targetSheet.getRange(1, currentCol, data.length, data[0].length).setValues(data);
}
示例结果:
脚本运行一次后:
再次运行后(以此类推):
至于删除超过 5 - 7 天的数据,这是我的实现,您可以尝试:
由于我在工作表TW 上的每个复制数据上都添加了时间戳,因此您可以参考以下示例脚本:
更新
脚本:
function deleteOlderThan5To7Days(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var targetSheet = ss.getSheetByName('TW');
var row = targetSheet.getDataRange().getLastRow();
var col = targetSheet.getDataRange().getLastColumn();
var data = targetSheet.getRange(row,1,1,col).getValues();
for(x=0; x< data[0].length; x++){
var curCol = x + 1;
if(data[0][x] != ""){
var getDate = Utilities.formatDate(new Date(data[0][x]), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "dd");
var checkDays = getDate - new Date().getDate();
if(new Date(data[0][x]).getMonth()+1 == new Date().getMonth()+1){ //If data timestamp is within the current month
if(checkDays > 5){ //Check if the timestamp of the data is more than 5 - 7 days
Logger.log("Current row date: "+data[0][x]+"\n"+"Found on column #"+curCol+ " is "+checkDays+" days older");
Logger.log("Delete data column " + curCol);
targetSheet.insertColumnsAfter(targetSheet.getLastColumn(),1); //add a blank column on every deletion
targetSheet.deleteColumn(curCol); //delete the points column data
return;
}else{
//Data timestamp is NOT older than 5-7 days");
}
}else{ //Data was copied last month or older that the current month
Logger.log("Current row date: "+data[0][x]+"\n"+"Found on column #"+curCol+ " is old");
Logger.log("Delete data column "+ curCol);
targetSheet.insertColumnsAfter(targetSheet.getLastColumn(),1); //add a blank column on every deletion
targetSheet.deleteColumn(curCol); //delete the points column data
return;
}
}
}
}
示例演示:
假设第一个数据是在 2021 年 11 月 2 日或11/2/2021 复制的,如TW 的样本表中所示:
运行示例函数deleteOlderThan5To7Days后,结果如下:
审核的执行日志:
注意:
如果月份与当前月份相同但早于 5-7 天,则适用相同的删除过程。