Я построил систему стилей "Конвейер" в Google Sheets, чтобы перемещать пользователей из следующих слотов в более близкие слоты, когда они становятся доступными.
Снимок экрана макета Google Sheets, где это реализовано.
Например, если кто-то был в «Пользователе 1», но затем ушел, он перемещает пользователя в «Пользователе 2» в «Пользователя 1»,Пользователь в «Пользователь 3» переходит к «Пользователь 2» и т. д., проталкивая их по цепочке, гарантируя, что слоты используются по порядку.
Поскольку требования основаны на времени, часто бывает так, чтоПользователи 1, 2 и 3 удаляются одновременно, это означает, что один человек остался в слоте «Пользователь 4».Используя текущий скрипт, он переместит их из «Пользователь 4» -> «Пользователь 3» -> «Пользователь 2» -> «Пользователь 1».
Кроме того, из-за некоторого форматирования, которое я настроил (индексирование), мне нужно, чтобы в ячейках отображалось слово «Нет» вместо того, чтобы оставаться пустым.Я смог сделать это легко, проверив, пуста ли ячейка, и если это так, установив значение «Нет».
Скрипт работает, но он действительно медленный.Общее время выполнения сценария составляет более 14 секунд.
Вот сценарии, которые я использую:
function conveyor() {
var s = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName('UsernameSheet');
// LOOP 1
var Username1Val = s.getRange('C3').getDisplayValue();
var Username2Val = s.getRange('I3').getDisplayValue();
var Username3Val = s.getRange('O3').getDisplayValue();
var Username4Val = s.getRange('U3').getDisplayValue();
var Username1 = s.getRange('C3')
var Username2 = s.getRange('I3')
var Username3 = s.getRange('O3')
var Username4 = s.getRange('U3')
if (Username3Val == 'None') {
FourtoThree();
}
if (Username1.isBlank()) {
Username1.setValue('None');
}
if (Username2.isBlank()) {
Username2.setValue('None');
}
if (Username3.isBlank()) {
Username3.setValue('None');
}
if (Username4.isBlank()) {
Username4.setValue('None');
}
if (Username2Val == 'None') {
ThreetoTwo();
}
if (Username1.isBlank()) {
Username1.setValue('None');
}
if (Username2.isBlank()) {
Username2.setValue('None');
}
if (Username3.isBlank()) {
Username3.setValue('None');
}
if (Username4.isBlank()) {
Username4.setValue('None');
}
if (Username1Val == 'None') {
TwotoOne();
}
if (Username1.isBlank()) {
Username1.setValue('None');
}
if (Username2.isBlank()) {
Username2.setValue('None');
}
if (Username3.isBlank()) {
Username3.setValue('None');
}
if (Username4.isBlank()) {
Username4.setValue('None');
}
// LOOP 2
var Username1Val = s.getRange('C3').getDisplayValue();
var Username2Val = s.getRange('I3').getDisplayValue();
var Username3Val = s.getRange('O3').getDisplayValue();
var Username4Val = s.getRange('U3').getDisplayValue();
var Username1 = s.getRange('C3')
var Username2 = s.getRange('I3')
var Username3 = s.getRange('O3')
var Username4 = s.getRange('U3')
if (Username3Val == 'None') {
FourtoThree();
}
if (Username1.isBlank()) {
Username1.setValue('None');
}
if (Username2.isBlank()) {
Username2.setValue('None');
}
if (Username3.isBlank()) {
Username3.setValue('None');
}
if (Username4.isBlank()) {
Username4.setValue('None');
}
if (Username2Val == 'None') {
ThreetoTwo();
}
if (Username1.isBlank()) {
Username1.setValue('None');
}
if (Username2.isBlank()) {
Username2.setValue('None');
}
if (Username3.isBlank()) {
Username3.setValue('None');
}
if (Username4.isBlank()) {
Username4.setValue('None');
}
if (Username1Val == 'None') {
TwotoOne();
}
if (Username1.isBlank()) {
Username1.setValue('None');
}
if (Username2.isBlank()) {
Username2.setValue('None');
}
if (Username3.isBlank()) {
Username3.setValue('None');
}
if (Username4.isBlank()) {
Username4.setValue('None');
}
// LOOP 3
var Username1Val = s.getRange('C3').getDisplayValue();
var Username2Val = s.getRange('I3').getDisplayValue();
var Username3Val = s.getRange('O3').getDisplayValue();
var Username4Val = s.getRange('U3').getDisplayValue();
var Username1 = s.getRange('C3')
var Username2 = s.getRange('I3')
var Username3 = s.getRange('O3')
var Username4 = s.getRange('U3')
if (Username3Val == 'None') {
FourtoThree();
}
if (Username1.isBlank()) {
Username1.setValue('None');
}
if (Username2.isBlank()) {
Username2.setValue('None');
}
if (Username3.isBlank()) {
Username3.setValue('None');
}
if (Username4.isBlank()) {
Username4.setValue('None');
}
if (Username2Val == 'None') {
ThreetoTwo();
}
if (Username1.isBlank()) {
Username1.setValue('None');
}
if (Username2.isBlank()) {
Username2.setValue('None');
}
if (Username3.isBlank()) {
Username3.setValue('None');
}
if (Username4.isBlank()) {
Username4.setValue('None');
}
if (Username1Val == 'None') {
TwotoOne();
}
if (Username1.isBlank()) {
Username1.setValue('None');
}
if (Username2.isBlank()) {
Username2.setValue('None');
}
if (Username3.isBlank()) {
Username3.setValue('None');
}
if (Username4.isBlank()) {
Username4.setValue('None');
}
}
function FourtoThree() {
var s = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName('UsernameSheet');
var Username3Name = s.getRange('O3');
var Username3NameVal = s.getRange('O3').getDisplayValue();
var Username3Start = s.getRange('O4');
var Username3StartVal = s.getRange('O4').getDisplayValue();
var Username3Finish = s.getRange('O5');
var Username3FinishVal = s.getRange('O5').getDisplayValue();
var Username3Break = s.getRange('Q7');
var Username3BreakVal = s.getRange('Q7').getDisplayValue();
var Username3Busy = s.getRange('Q6');
var Username3BusyVal = s.getRange('Q6').getDisplayValue();
var Username4Name = s.getRange('U3');
var Username4NameVal = s.getRange('U3').getDisplayValue();
var Username4Start = s.getRange('U4');
var Username4StartVal = s.getRange('U4').getDisplayValue();
var Username4Finish = s.getRange('U5');
var Username4FinishVal = s.getRange('U5').getDisplayValue();
var Username4Break = s.getRange('W7');
var Username4BreakVal = s.getRange('W7').getDisplayValue();
var Username4Busy = s.getRange('W6');
var Username4BusyVal = s.getRange('W6').getDisplayValue();
Username3Name.setValue(Username4NameVal);
Username3Start.setValue(Username4StartVal);
Username3Finish.setValue(Username4FinishVal);
Username3Break.setValue(Username4BreakVal);
Username3Busy.setValue(Username4BusyVal);
Username4Name.clearContent();
Username4Start.clearContent();
Username4Finish.clearContent();
Username4Break.clearContent();
Username4Busy.clearContent();
}
function ThreetoTwo() {
var s = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName('UsernameSheet');
var Username2Name = s.getRange('I3');
var Username2NameVal = s.getRange('I3').getDisplayValue();
var Username2Start = s.getRange('I4');
var Username2StartVal = s.getRange('I4').getDisplayValue();
var Username2Finish = s.getRange('I5');
var Username2FinishVal = s.getRange('I5').getDisplayValue();
var Username2Break = s.getRange('K7');
var Username2BreakVal = s.getRange('K7').getDisplayValue();
var Username2Busy = s.getRange('K6');
var Username2BusyVal = s.getRange('K6').getDisplayValue();
var Username3Name = s.getRange('O3');
var Username3NameVal = s.getRange('O3').getDisplayValue();
var Username3Start = s.getRange('O4');
var Username3StartVal = s.getRange('O4').getDisplayValue();
var Username3Finish = s.getRange('O5');
var Username3FinishVal = s.getRange('O5').getDisplayValue();
var Username3Break = s.getRange('Q7');
var Username3BreakVal = s.getRange('Q7').getDisplayValue();
var Username3Busy = s.getRange('Q6');
var Username3BusyVal = s.getRange('Q6').getDisplayValue();
Username2Name.setValue(Username3NameVal);
Username2Start.setValue(Username3StartVal);
Username2Finish.setValue(Username3FinishVal);
Username2Break.setValue(Username3BreakVal);
Username2Busy.setValue(Username3BusyVal);
Username3Name.clearContent();
Username3Start.clearContent();
Username3Finish.clearContent();
Username3Break.clearContent();
Username3Busy.clearContent();
}
function TwotoOne() {
var s = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName('UsernameSheet');
var Username1Name = s.getRange('C3');
var Username1NameVal = s.getRange('C3').getDisplayValue();
var Username1Start = s.getRange('C4');
var Username1StartVal = s.getRange('C4').getDisplayValue();
var Username1Finish = s.getRange('C5');
var Username1FinishVal = s.getRange('C5').getDisplayValue();
var Username1Break = s.getRange('E7');
var Username1BreakVal = s.getRange('E7').getDisplayValue();
var Username1Busy = s.getRange('E6');
var Username1BusyVal = s.getRange('E6').getDisplayValue();
var Username2Name = s.getRange('I3');
var Username2NameVal = s.getRange('I3').getDisplayValue();
var Username2Start = s.getRange('I4');
var Username2StartVal = s.getRange('I4').getDisplayValue();
var Username2Finish = s.getRange('I5');
var Username2FinishVal = s.getRange('I5').getDisplayValue();
var Username2Break = s.getRange('K7');
var Username2BreakVal = s.getRange('K7').getDisplayValue();
var Username2Busy = s.getRange('K6');
var Username2BusyVal = s.getRange('K6').getDisplayValue();
Username1Name.setValue(Username2NameVal);
Username1Start.setValue(Username2StartVal);
Username1Finish.setValue(Username2FinishVal);
Username1Break.setValue(Username2BreakVal);
Username1Busy.setValue(Username2BusyVal);
Username2Name.clearContent();
Username2Start.clearContent();
Username2Finish.clearContent();
Username2Break.clearContent();
Username2Busy.clearContent();
}
Что делает сценарий Во-первых запускается, чтобы проверить, если имена пользователей 1-4 имеют пустую клетку.Если они это делают, они устанавливают значения «Нет».
Затем выполняется оператор IF, чтобы проверить, если Имя пользователя 3 = Нет, если это так, тогда он запускает функцию FourtoThree, которая сама по себе перемещает значения изИмя пользователя 4 - Имя пользователя 3. Затем он проверяет Имя пользователя 2, затем имя пользователя 1 и выполняет те же функции перемещения данных, если значение равно «Нет».Затем вся эта функция запускается 3 раза, максимальное количество ходов, которое потребуется для конвейерной системы.
Я все еще новичок в Google Apps Script (ну, в общем, JavaScript), так что я бросил это вместеи был счастлив, что это сработало.
Теперь вялое время выполнения скрипта становится проблематичным для его сценария использования, и я ищу способы оптимизировать это, пожалуйста.
Я вовсе не ожидаю, что кто-нибудь напишет мне сценарий, который облегчит мои проблемы, но если бы кто-нибудь мог предложить пример функции, которая могла бы достичь того, что я пытаюсь сделать, и / или идею о том, как реализоватьит.