Пока код зависает, отладка. Петли бесконечно? Но я не уверен, как, поскольку у меня есть определенное конечное условие, которое должно быть выполнено.
Лист, с которым я работаю, является инвентарным листом. У меня есть другой скрипт, который автоматически каталогизирует грузы, когда они покидают склад на отдельной вкладке, которая затем оставляет пустые строки данных. Я хочу сдвинуть данные до первой пустой строки. Сценарий будет делать это при многократном запуске, однако, если при запуске сценария все данные будут сжаты, он переместит последнюю строку данных в первую пустую строку, которая на самом деле находится ниже последней строки данных.
function shift() {
//this sheet
var spr = SpreadsheetApp.getActiveSpreadsheet();
var thissheet = spr.getSheetByName('CURRENT MONTH');
//define last row with data
var lastRow = thissheet.getLastRow();
var range = thissheet.getRange("A" + lastRow);
if (range.getValue() !== "") {
var lastDataRow = lastRow;
} else {
var lastDataRow = range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
}
//define first empty row
var column = thissheet.getRange('A11:A');
var values = column.getValues();
var ct = 0;
while (values[ct] && values[ct][0] != "") {
ct++;
}
console.log(ct + 1);
var firstEmptyRow = (ct + 1) + 10 //+10 accounts for header
//the range to copy to (first empty row)
var emptyrange = thissheet.getRange(firstEmptyRow, 1, 1, 15);
//the copy and clear code
while (lastDataRow > firstEmptyRow) {
thissheet.getRange(lastDataRow, 1, 1, 15).copyTo(emptyrange);
thissheet.getRange(lastDataRow, 1, 1, 15).clearContent();
}
}
Мое решение состояло в том, чтобы использовать while для смещения данных до тех пор, пока номер последней строки данных не станет меньше номера первой пустой строки, поэтому, хотя (lastDataRow> firstEmptyRow) должен работать, пока есть данные ниже пустой строки.