Мне интересно, сможете ли вы помочь мне сократить время выполнения на небольшом кусочке кода, который я написал. Это кажется очень неэффективным, но, будучи новичком, я действительно не уверен в том, как лучше сделать это лучше. Любой совет приветствуется!
Помещение - очень простой инструмент по вызову. Есть слоты с 1 по 4.
Пользователи могут указывать свое время начала, имя и время окончания в любом из 4 доступных слотов.
Поскольку пользователи заканчивают в разное время, это может привести к тому, что они будут выглядеть немного грязно - например, в слотах 1 и 4 есть данные, но в слотах 2-3 пусто.
Для того, чтобы это выглядело немного более аккуратно, я сделал немного кода, чтобы проверить, является ли значение ячейки "None" (у меня есть другой скрипт, чтобы изменить пустое значение на "None", для непрерывности), и если это так, он перемещает его вниз по линии (конвейерная система).
Это выполняется в общей сложности 4 раза в рамках одной и той же функции, чтобы гарантировать, что она ловит любую возможную комбинацию заполненных слотов.
По какой-то причине у меня возникла проблема с вводом кода здесь (он портит форматирование), поэтому я включил скриншоты и вставку кода:
Скриншот кода 1
Скриншот кода 2
![Code Screenshot 2](https://i.stack.imgur.com/WRYA8.png)
Вставьте полную копию кода с правильным форматированием
function onEdit(e) {
var s = SpreadsheetApp.getActiveSpreadsheet();
var User1Name = s.getRange("K4");
var User2Name = s.getRange("AK4");
var User3Name = s.getRange("BK4");
var User4Name = s.getRange("CK4");
var U1 = s.getRange('K4')
var U2 = s.getRange('AK4')
var U3 = s.getRange('BK4')
var U4 = s.getRange('CK4')
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
}
function conveyor() {
var s = SpreadsheetApp.getActiveSpreadsheet();
var User1Name = s.getRange("K4").getDisplayValue();
var User2Name = s.getRange("AK4").getDisplayValue();
var User3Name = s.getRange("BK4").getDisplayValue();
var User4Name = s.getRange("CK4").getDisplayValue();
var U1 = s.getRange('K4')
var U2 = s.getRange('AK4')
var U3 = s.getRange('BK4')
var U4 = s.getRange('CK4')
if (User3Name == 'None'){
FourtoThree();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
if (User2Name == 'None'){
ThreetoTwo();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
if (User1Name == 'None'){
TwotoOne();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
var User1Name = s.getRange("K4").getDisplayValue();
var User2Name = s.getRange("AK4").getDisplayValue();
var User3Name = s.getRange("BK4").getDisplayValue();
var User4Name = s.getRange("CK4").getDisplayValue();
var U1 = s.getRange('K4')
var U2 = s.getRange('AK4')
var U3 = s.getRange('BK4')
var U4 = s.getRange('CK4')
if (User3Name == 'None'){
FourtoThree();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
if (User2Name == 'None'){
ThreetoTwo();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
if (User1Name == 'None'){
TwotoOne();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
var User1Name = s.getRange("K4").getDisplayValue();
var User2Name = s.getRange("AK4").getDisplayValue();
var User3Name = s.getRange("BK4").getDisplayValue();
var User4Name = s.getRange("CK4").getDisplayValue();
var U1 = s.getRange('K4')
var U2 = s.getRange('AK4')
var U3 = s.getRange('BK4')
var U4 = s.getRange('CK4')
if (User3Name == 'None'){
FourtoThree();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
if (User2Name == 'None'){
ThreetoTwo();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
if (User1Name == 'None'){
TwotoOne();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
var User1Name = s.getRange("K4").getDisplayValue();
var User2Name = s.getRange("AK4").getDisplayValue();
var User3Name = s.getRange("BK4").getDisplayValue();
var User4Name = s.getRange("CK4").getDisplayValue();
var U1 = s.getRange('K4')
var U2 = s.getRange('AK4')
var U3 = s.getRange('BK4')
var U4 = s.getRange('CK4')
if (User3Name == 'None'){
FourtoThree();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
if (User2Name == 'None'){
ThreetoTwo();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
if (User1Name == 'None'){
TwotoOne();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
}
// ----------------------------------------------------------------------------------------------------------
// MOVE SCRIPTS //
function TwotoOne() {
var spreadsheet = SpreadsheetApp.getActive()
.getSheetByName('Sheet1');
spreadsheet.getRange('C4:I6').activate();
spreadsheet.getRange('AC4:AI6').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('K4:Q6').activate();
spreadsheet.getRange('AK4:AQ6').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('S4:Y6').activate();
spreadsheet.getRange('AS4:AY6').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('AC4:AI6').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('AK4:AQ6').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('AS4:AY6').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
};
function ThreetoTwo() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('AC4:AI6').activate();
spreadsheet.getRange('BC4:BI6').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('AK4:AQ6').activate();
spreadsheet.getRange('BK4:BQ6').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('AS4:AY6').activate();
spreadsheet.getRange('BS4:BY6').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('BC4:BI6').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('BK4:BQ6').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('BS4:BY6').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
};
function FourtoThree() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('BC4:BI6').activate();
spreadsheet.getRange('CC4:CI6').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('BK4:BQ6').activate();
spreadsheet.getRange('CK4:CQ6').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('BS4:BY6').activate();
spreadsheet.getRange('CS4:CY6').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('CC4:CI6').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('CK4:CQ6').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('CS4:CY6').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
};
RAW Paste Data
function onEdit(e) {
var s = SpreadsheetApp.getActiveSpreadsheet();
var User1Name = s.getRange("K4");
var User2Name = s.getRange("AK4");
var User3Name = s.getRange("BK4");
var User4Name = s.getRange("CK4");
var U1 = s.getRange('K4')
var U2 = s.getRange('AK4')
var U3 = s.getRange('BK4')
var U4 = s.getRange('CK4')
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
}
function conveyor() {
var s = SpreadsheetApp.getActiveSpreadsheet();
var User1Name = s.getRange("K4").getDisplayValue();
var User2Name = s.getRange("AK4").getDisplayValue();
var User3Name = s.getRange("BK4").getDisplayValue();
var User4Name = s.getRange("CK4").getDisplayValue();
var U1 = s.getRange('K4')
var U2 = s.getRange('AK4')
var U3 = s.getRange('BK4')
var U4 = s.getRange('CK4')
if (User3Name == 'None'){
FourtoThree();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
if (User2Name == 'None'){
ThreetoTwo();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
if (User1Name == 'None'){
TwotoOne();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
var User1Name = s.getRange("K4").getDisplayValue();
var User2Name = s.getRange("AK4").getDisplayValue();
var User3Name = s.getRange("BK4").getDisplayValue();
var User4Name = s.getRange("CK4").getDisplayValue();
var U1 = s.getRange('K4')
var U2 = s.getRange('AK4')
var U3 = s.getRange('BK4')
var U4 = s.getRange('CK4')
if (User3Name == 'None'){
FourtoThree();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
if (User2Name == 'None'){
ThreetoTwo();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
if (User1Name == 'None'){
TwotoOne();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
var User1Name = s.getRange("K4").getDisplayValue();
var User2Name = s.getRange("AK4").getDisplayValue();
var User3Name = s.getRange("BK4").getDisplayValue();
var User4Name = s.getRange("CK4").getDisplayValue();
var U1 = s.getRange('K4')
var U2 = s.getRange('AK4')
var U3 = s.getRange('BK4')
var U4 = s.getRange('CK4')
if (User3Name == 'None'){
FourtoThree();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
if (User2Name == 'None'){
ThreetoTwo();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
if (User1Name == 'None'){
TwotoOne();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
var User1Name = s.getRange("K4").getDisplayValue();
var User2Name = s.getRange("AK4").getDisplayValue();
var User3Name = s.getRange("BK4").getDisplayValue();
var User4Name = s.getRange("CK4").getDisplayValue();
var U1 = s.getRange('K4')
var U2 = s.getRange('AK4')
var U3 = s.getRange('BK4')
var U4 = s.getRange('CK4')
if (User3Name == 'None'){
FourtoThree();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
if (User2Name == 'None'){
ThreetoTwo();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
if (User1Name == 'None'){
TwotoOne();
}
if (U1.isBlank()){
U1.setValue('None');}
if (U2.isBlank()){
U2.setValue('None');}
if (U3.isBlank()){
U3.setValue('None');}
if (U4.isBlank()){
U4.setValue('None');}
}
// ----------------------------------------------------------------------------------------------------------
// MOVE SCRIPTS //
function TwotoOne() {
var spreadsheet = SpreadsheetApp.getActive()
.getSheetByName('Sheet1');
spreadsheet.getRange('C4:I6').activate();
spreadsheet.getRange('AC4:AI6').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('K4:Q6').activate();
spreadsheet.getRange('AK4:AQ6').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('S4:Y6').activate();
spreadsheet.getRange('AS4:AY6').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('AC4:AI6').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('AK4:AQ6').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('AS4:AY6').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
};
function ThreetoTwo() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('AC4:AI6').activate();
spreadsheet.getRange('BC4:BI6').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('AK4:AQ6').activate();
spreadsheet.getRange('BK4:BQ6').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('AS4:AY6').activate();
spreadsheet.getRange('BS4:BY6').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('BC4:BI6').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('BK4:BQ6').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('BS4:BY6').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
};
function FourtoThree() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('BC4:BI6').activate();
spreadsheet.getRange('CC4:CI6').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('BK4:BQ6').activate();
spreadsheet.getRange('CK4:CQ6').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('BS4:BY6').activate();
spreadsheet.getRange('CS4:CY6').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('CC4:CI6').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('CK4:CQ6').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('CS4:CY6').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
};
Код конвейера меньше function conveyor()
, а код движения меньше function TwotoOne()
, function ThreetoTwo()
и function FourtoThree()
.
Проблема с кодом (за исключением того, что он супер базовый, но это радость от того, чтобы быть нубом) заключается в том, что выполнение function conveyor()
состоит в том, что время выполнения составляет приблизительно 15 секунд.
Есть что-нибудь, что вы бы посоветовали сократить время выполнения?
Если вы хотите увидеть код в действии или физически взглянуть на код, пожалуйста, ознакомьтесь с документом Google Spreadsheet Doc . Поместите любую комбинацию информации в каждый слот, нажмите «RUN», и он всегда будет перемещать их обратно вниз, чтобы привести их в порядок (таким образом, 2 и 3 станут 1 и 2, 1 и 4 станут 1 и 2, 1,3 и 4 станет 1,2 и 3 и т. Д.).
(Это полная копия (не оригинал) моей электронной таблицы, без конфиденциальной информации и только базового кода, необходимого для функционирования. Не стесняйтесь повозиться или уничтожить столько, сколько необходимо. Существует полная резервная копия. Также Как только решение будет найдено, я восстановлю исходную версию, чтобы будущие участники опроса могли увидеть исходный код) и увидели мою проблему.
Еще раз спасибо за ваше время. Дайте мне знать, если у вас есть другие вопросы, и я сделаю все возможное, чтобы объяснить!