Рекомендации по сокращению времени выполнения действия перемещения данных из скрипта Google Apps - PullRequest
0 голосов
/ 30 апреля 2018

Мне интересно, сможете ли вы помочь мне сократить время выполнения на небольшом кусочке кода, который я написал. Это кажется очень неэффективным, но, будучи новичком, я действительно не уверен в том, как лучше сделать это лучше. Любой совет приветствуется!

Помещение - очень простой инструмент по вызову. Есть слоты с 1 по 4.

Пользователи могут указывать свое время начала, имя и время окончания в любом из 4 доступных слотов.

Поскольку пользователи заканчивают в разное время, это может привести к тому, что они будут выглядеть немного грязно - например, в слотах 1 и 4 есть данные, но в слотах 2-3 пусто.

Для того, чтобы это выглядело немного более аккуратно, я сделал немного кода, чтобы проверить, является ли значение ячейки "None" (у меня есть другой скрипт, чтобы изменить пустое значение на "None", для непрерывности), и если это так, он перемещает его вниз по линии (конвейерная система).

Это выполняется в общей сложности 4 раза в рамках одной и той же функции, чтобы гарантировать, что она ловит любую возможную комбинацию заполненных слотов.

По какой-то причине у меня возникла проблема с вводом кода здесь (он портит форматирование), поэтому я включил скриншоты и вставку кода: Скриншот кода 1 Code Screenshot 1 Скриншот кода 2 Code Screenshot 2

Вставьте полную копию кода с правильным форматированием


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 и т. Д.).

(Это полная копия (не оригинал) моей электронной таблицы, без конфиденциальной информации и только базового кода, необходимого для функционирования. Не стесняйтесь повозиться или уничтожить столько, сколько необходимо. Существует полная резервная копия. Также Как только решение будет найдено, я восстановлю исходную версию, чтобы будущие участники опроса могли увидеть исходный код) и увидели мою проблему.

Еще раз спасибо за ваше время. Дайте мне знать, если у вас есть другие вопросы, и я сделаю все возможное, чтобы объяснить!

1 Ответ

0 голосов
/ 01 мая 2018
/**
* Moves Filled Slots to occupy the left empty slots
* @OnlyCurrentDoc
*/
function conveyorBelt() {
  var rangList = SpreadsheetApp.getActiveSheet().getRangeList(['K4','AK4','BK4','CK4']); // Four slot entries
  var rngArr = rangList.getRanges(); //getEachSlotRange
  for(var i=0;i<rngArr.length;i++) { //Loop over each Slot
    if (rngArr[i].isBlank()) { //if current slot is empty,
      for (var j= i+1;j<rngArr.length;j++) { //Loop over other slots to the right to find the  next non empty slot
        if (!rngArr[j].isBlank()) { //next non empty slot
          var targetRange = rngArr[i].offset(0,-8,3,23);//Expand range to full slot(23Columns and 3rows)
          var sourceRange = rngArr[j].offset(0,-8,3,23);//Expand range to full slot(23Columns and 3rows)
          sourceRange.copyTo(targetRange,SpreadsheetApp.CopyPasteType.PASTE_NORMAL,false); //Paste Normal Ignoring Color Formatting
          sourceRange.clearContent()
          break;

        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...