簡體   English   中英

我怎樣才能使這個谷歌表腳本代碼更短/更快?

[英]How can I make this google sheets script code shorter/faster?

代碼是不言自明的。 只是有很多我需要獨立隨機化的范圍。 例如,range('W1:W4') 不應與 range('W5:W8') 混淆,因此我不能隨機化 range('W1:W80')。 任何幫助或建議都會很棒! 非常感謝。 目前,代碼的運行時間比我希望的要長一些(14 秒)。

function clickStart() {

  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('T2:T21').randomize();
  spreadsheet.getRange('Y1:Y20').randomize();
  spreadsheet.getRange('Y21:Y40').randomize();
  spreadsheet.getRange('Y41:Y60').randomize();
  spreadsheet.getRange('Y61:Y80').randomize();
  spreadsheet.getRange('W1:W4').randomize();
  spreadsheet.getRange('W5:W8').randomize();
  spreadsheet.getRange('W9:W12').randomize();
  spreadsheet.getRange('W13:W16').randomize();
  spreadsheet.getRange('W17:W20').randomize();
  spreadsheet.getRange('W21:W24').randomize();
  spreadsheet.getRange('W25:W28').randomize();
  spreadsheet.getRange('W29:W32').randomize();
  spreadsheet.getRange('W33:W36').randomize();
  spreadsheet.getRange('W37:W40').randomize();
  spreadsheet.getRange('W41:W44').randomize();
  spreadsheet.getRange('W45:W48').randomize();
  spreadsheet.getRange('W49:W52').randomize();
  spreadsheet.getRange('W53:W56').randomize();
  spreadsheet.getRange('W57:W60').randomize();
  spreadsheet.getRange('W61:W64').randomize();
  spreadsheet.getRange('W65:W68').randomize();
  spreadsheet.getRange('W69:W72').randomize();
  spreadsheet.getRange('W73:W76').randomize();
  spreadsheet.getRange('W77:W80').randomize();
  spreadsheet.getRange('H10:H12').randomize();
  spreadsheet.getRange('H14:H16').randomize();
  spreadsheet.getRange('H18:H20').randomize();
  spreadsheet.getRange('H22:H24').randomize();
  spreadsheet.getRange('H26:H28').randomize();
  spreadsheet.getRange('H30:H32').randomize();
  spreadsheet.getRange('H34:H36').randomize();
  spreadsheet.getRange('H38:H40').randomize();
  spreadsheet.getRange('H42:H44').randomize();
  spreadsheet.getRange('H46:H48').randomize();
  spreadsheet.getRange('H50:H52').randomize();
  spreadsheet.getRange('H54:H56').randomize();
  spreadsheet.getRange('H58:H60').randomize();
  spreadsheet.getRange('H62:H64').randomize();
  spreadsheet.getRange('H66:H68').randomize();
  spreadsheet.getRange('H70:H72').randomize();
  spreadsheet.getRange('H74:H76').randomize();
  spreadsheet.getRange('H78:H80').randomize();
  spreadsheet.getRange('H82:H84').randomize();
  spreadsheet.getRange('H86:H88').randomize();
};

將您在getRange方法中放入的所有值放在一個數組中並循環遍歷它。 每個range調用getRangerandomize方法。

function clickStart() {

  var ranges = ['T2:T21', 'Y1:Y20', 'Y21:Y40', 'Y41:Y60']; // Add all cells to this array.
  var spreadsheet = SpreadsheetApp.getActive();
  for (let range of ranges) {
    spreadsheet.getRange(range).randomize();
  }

};

但是此時代碼仍然需要很長時間並在工作時阻塞您的線程。 將它包裝在一個Promise ,該Promise在循環准備好使代碼異步時解析。 這將確保您的其余代碼仍將運行。

function clickStart() {

  return new Promise(resolve => {

    var ranges = ['T2:T21', 'Y1:Y20', 'Y21:Y40', 'Y41:Y60']; // Add all cells to this array.
    var spreadsheet = SpreadsheetApp.getActive();
    for (let range of ranges) {
      spreadsheet.getRange(range).randomize();
    }
    resolve(spreadsheet);

  });

};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM