首页 > 解决方案 > 关于减少 Google Apps 脚本数据移动操作的运行时间的建议

问题描述

我想知道您是否能够帮助我减少我编写的一小段代码的运行时间。感觉效率很低,但作为一个菜鸟,我真的不确定如何让它变得更好。任何建议表示赞赏!

前提是一个非常简单的随叫随到的工具。有插槽 1 到 4。

用户可以将他们的开始时间、姓名和结束时间放在 4 个可用插槽中的任何一个中。

由于用户在不同的时间完成,它可能会导致它看起来有点混乱 - 例如插槽 1 和 4 有数据,但插槽 2-3 是空的。

为了使它看起来更整洁,我编写了一些代码来检查单元格值是否为“None”(我有另一个脚本将空白值更改为“None”,以保持连续性),如果是,它将其沿生产线向下移动(类似传送带的系统)。

这在同一个函数中总共运行了 4 次,以确保它捕获任何可能的已填充插槽组合。

出于某种原因,我在这里输入代码时遇到问题(它搞砸了格式),所以我包含了屏幕截图和代码的粘贴箱:代码截图 1 代码截图 1 代码截图 2 代码截图 2

Pastebin 完整的代码副本,格式正确


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 电子表格文档。将任意信息组合放入每个插槽中,点击“运行”,它会始终将它们向下移动以按顺序排列(因此 2 和 3 将变为 1 和 2,1 和 4 将变为 1 和 2,1,3 和4 将变为 1,2 和 3 等)。

(这是我的电子表格的完整副本(非原件),没有机密信息,只有运行所需的基本代码。随意修改或销毁它。有一个完整的备份。此外,一旦已找到解决方案,我将恢复原始版本,以便将来的提问者能够看到初始代码)并看到我的问题。

感谢你的宝贵时间。如果您有任何其他问题,请告诉我,我会尽力解释!

标签: google-apps-scriptgoogle-sheetsgoogle-apps

解决方案


/**
* 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;

        }
      }
    }
  }
}

推荐阅读