Меня попросили создать живую электронную таблицу Google Sheets, чтобы отслеживать график работы на нашем дворе.У меня нет опыта работы со сценарием, но я узнал, что я могу программировать свой лист вместо того, чтобы скрывать формулы, и это даст более чистый результат.Мне удалось организовать лист самостоятельно, и я смог сделать его архивным вручную (onEdit).То, что я ищу, - это чтобы он автоматически запускал код в 1 час ночи, поэтому, когда мы приступаем к работе, он архивирует на основе значения ячейки в определенном столбце.
Это пример моего скрипта onEdit, который работает, но когда кто-то пытается пометить столбец «ДА», возникает некоторая задержка, которая может привести к проверке неправильной ячейки, которую я затем вручную исправляю.
function onEdit() {
var sheetNameToWatch = "Schedule";
var columnNumberToWatch = 28;
var valueToWatch = "Yes";
var sheetNameToMoveTheRowTo = "Archive";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveCell();
if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {
var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
sheet.deleteRow(range.getRow());
}
}
Таким образом, этот код выполняется с ошибкой 100%, но сохраняет и выполняет, и я, честно говоря, не знаю почему.Может быть, я неправильно понимаю значения, которые мне нужно вставить после области «функция».У меня была эта настройка с триггером «Автоархивация», который создал кнопку меню с опцией «Выполнить» на листе, но когда вы щелкаете по ней, она выполняет только последнюю строку с «Да» в столбце 28 (каждое нажатие кнопкикнопка будет перемещаться на 1 строку, пока все строки не будут перемещены), и кнопка не будет работать для других пользователей листа.
function createTrigger() {
ScriptApp.newTrigger("Move Archive") //Move Archive is the name of the script
.timeBased()
.everyMinutes(1) // only set to 1 minute for testing, I can change this out for a daily timer
.create();
}
function myFunction() {
var sheetNameToWatch = "Schedule"; // "schedule" is the sheet we enter info on
var columnNumberToWatch = 28; //Column is "AB"
var valueToWatch = "Yes";
var sheetNameToMoveTheRowTo = "Archive"; //"Archive is the sheet the info is sent to"
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveCell();
if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {
var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange); // I get its programmed for last row with "Yes" here, unsure on how to change this.
sheet.deleteRow(range.getRow());
function myfunction() {
ScriptApp.deleteTrigger("Move Archive"); // could have wrong value here
}
}
}
Все, что мне нужно, это лист "Архивировать" на основе значения "Да" в столбце 28 (AB).Я хочу, чтобы каждая строка со значением этого столбца автоматически архивировалась в 1 час ночи.Любая помощь приветствуется.Если кто-то даже захочет порекомендовать книгу или цифровую инструкцию для начинающих, это было бы здорово.