Я пытаюсь написать Google Script, который связан с Google Sheet и делает несколько изменений при редактировании.При любом изменении сценарий должен повторно отсортировать строки по определенному столбцу.При изменении в определенном столбце сценарий должен создать значение даты в соседнем столбце этой строки (т. Е. Если вы редактируете C2, он должен создать дату в D2, соответствующую дате редактирования).
У меня есть все основные функции для каждой функции, работающие нормально, и они работают отлично самостоятельно.Вопрос в заказе / времени.
Я редактирую C2, поэтому он создает дату в D2.Но, по-видимому, за до он делает это, пересортирует строки, так что отредактированная строка теперь находится в новом месте, а дата появляется в неправильной строке.(Я думаю, что было бы точнее сказать, что он сортирует строки , а обрабатывает функцию для добавления даты).
Конечный результат состоит в том, что ячейка даты заполняется в правильной строке численно (т.е. D2), но содержимое строки 2 к этому моменту перемещено в другое место, поэтому оно находится в неправильном содержимом строки-wise.
Вот мои функции:
function reSort() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var range = sheet.getRange("A2:C1000");
// Sorts descending by column B
range.sort({column: 3, ascending: true });
}
function saveDate (event) {
var ss = event.source;
var range = event.range;
var a1 = range.getA1Notation();
var col = a1[0];
var row = a1.slice(1);
// If status has just been modified
if (col === 'C' && a1.length >= 1) {
var dateCell = ss.getRange('D'.concat(row)).getCell(1,1);
// Empty date if status is null
if (event.value === '') {
dateCell.setValue('');
// Otherwise, add date
} else {
var date = new Date();
dateCell.setValue([date.getMonth() + 1, date.getDate(), date.getFullYear()].join('/'))
}
}
}
function saveDateAndResort(event) {
saveDate(event);
reSort();
}
Кажется, что решение состоит в том, чтобы запустить одну функцию, а затем другую (в частности, сохранить дату, а затем применить).Это то, что я пытаюсь сделать в saveDateAndResort
, это функция, которая срабатывает.Но то же самое асинхронное поведение все еще, кажется, происходит.Я бы хотел запустить один и , затем другой, только после завершения первого, но когда я попробовал setTimeout
, он не работал (в частности, кажется, что он игнорирует содержимое внутри функции тайм-аута).вызов).
Я что-то упускаю или делаю что-то не так?Это, кажется, ведет себя странно.