Я пытаюсь переместить некоторые даты из одного столбца в следующий соседний столбец. Я хочу, чтобы он перемещал ячейки только до определенной даты и до тех пор, пока она не достигнет пустой.
Я пытался использовать метод фильтра, но я не думаю, что он работает для меня.
Вот изображение того, чего я пытаюсь достичь.
Я выбрал значения ячеек, которые должен переместить скрипт; остальные должны оставаться там, где они есть.
Вот мой код:
function moveOldEntryDates()
{
// Get active spreadsheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName("Sheet1");
var oneDayAgo = sheet1.getRange(2, 6, 1, 1);
Logger.log("First Date: " + oneDayAgo.getValue());
var sevenDaysAgo = subtractDaysFromDate(oneDayAgo.getValue(), 7);
Logger.log("Seven days ago Date: " + sevenDaysAgo);
// Dates start on second row
var dateOffset = 2;
// Not working properly
var FColumn = sheet1.getRange("F6:F").getValues(); // Date Column
var LastRowInFColumn = FColumn.filter(String).length;
//var g = e.filter( function(elem, pos){ return (f.indexOf(elem[1]) == pos) })
Logger.log("Last row in column F is "+ LastRowInFColumn);
var dateColumn = sheet1.getRange(dateOffset, 6, LastRowInFColumn, 1);
var dateValues = dateColumn.getValues();
var currentRow = 0;
// This while loop finds the start of the outdated dates
while(dateValues[currentRow][0] != "")
{
var dateBuilt = new Date(dateValues[currentRow][0]);
var less = dateBuilt < sevenDaysAgo;
Logger.log(dateBuilt + " less than " + sevenDaysAgo + "?: " + less + " at row: " + currentRow + dateOffset);
// Check if less than 7 days ago
if(less)
{
startOfOutdatedCells = dateValues[currentRow][0]; // if date is less than oneWeekAgo, it's outdated
// everything after is already outdated.
break;
}
else if(!less)
{
currentRow++;
}
}
var outdatedDateRow = currentRow + dateOffset;
Logger.log("First outdated date starts in row: " + outdatedDateRow);
// Create a new range to move
var outdatedCellRange = sheet1.getRange(outdatedDateRow,6, LastRowInFColumn, 1);
var outdatedCellRangeValues = outdatedCellRange.getValues();
var oudatedCellCopy = outdatedCellRange.moveTo(sheet1.getRange(outdatedDateRow, 7)); // currentRow = the current row is at startOfOutdatedCells
}
function subtractDaysFromDate(date, days)
{
var result = new Date(date.getTime()-days*(24*3600*1000));
return result
}
Я предполагаю, что var LastRowInFColumn = FColumn.filter(String).length;
не фильтрует / работает неправильно. Вместо того, чтобы возвращать массив, который содержит только значения String, он по-прежнему возвращает весь столбец, включая пустые ячейки. В результате вот что происходит, когда я запускаю скрипт:
Вы также можете заметить, что он перемещает пустые ячейки и размещает их, перезаписывая значения в другом столбце. Если я запускаю его в третий раз, он просто очищает столбец, потому что перемещает и пустые.
Простите за длинный пост! Любая помощь будет принята с благодарностью. Спасибо!