Как видно из заголовка, я добавляю дату оплаты через одну неделю с сегодняшнего дня в ячейку, когда редактируется одна из двух смежных ячеек. Первая ячейка является вкладчиком, поэтому, когда кто-то назначен на задачу, устанавливается срок выполнения. Вторая ячейка - это статус завершения, поэтому, если задание установлено на «Завершено», оно изменит ячейку срока выполнения на «выполнено».
Я не хочу, чтобы это изменилось при изменении текущей даты. Также хочу, чтобы он оставался прежним, если автор редактируется позже.
В моей первой попытке был скрипт для отдельных ячеек, и он автоматически вызывался при редактировании любого из параметров. В настоящее время не используется триггер onEdit ().
function setDate(contrib, progress) {
//contrib: the current assigned contributor
//progress: cell showing progress state (Not started, begun, completed)
var range = SpreadsheetApp.getActiveRange();
var d = range.getValue();
if(progress == 'Completed') { return 'done'; }
if(d instanceof Date) { return; }
if(contrib == '') { return; }
//if progress is completed, it should always return done
//if there is already a date there, it should not change it
//if contrib is blank, as long as there wasn't already a date, we don't want to add one
today = new Date();
due = new Date();
due.setDate(today.getDate() + 7); //one week from today
return due;
}
Проблема в том, что когда вы редактируете вкладчика или статус прогресса, он меняет ячейку даты выполнения на «Загрузка ...», поэтому я не могу на самом делеполучить исходное содержимое.
Моя вторая попытка состояла в том, чтобы создать функцию, которая будет проходить через весь столбец.
function setDueDate(contribR, dueR, progressR) {
today = new Date();
due = new Date();
due.setDate(today.getDate() + 7); //one week from today
dates = ["Due Date"];
//the first value in array has to be "Due Date" because the script is placed in the title cell for that column, the cell above the due date column I want to edit
for(var i = 0; i < dueR.length; i++) {
if(progressR[i] == 'Completed') {
dates.push('done');
}
else if(dueR[i] instanceof Date) {
dates.push(dueR[i]);
}
else if(contribR[i] != '') {
dates.push(dueR[i]);
}
else {
dates.push('');
}
}
return dates;
}
Однако проблема здесь оказалась аналогичной. Когда этот скрипт вызывается, он сначала очищает весь столбец сроков, поэтому первоначальная дата будет потеряна.
Любые мысли, советы, предложения приветствуются.