Как я могу сделать этот код скрипта Google листов короче / быстрее? - PullRequest
0 голосов
/ 13 февраля 2020

Код довольно понятен. Просто есть много диапазонов, которые мне нужно рандомизировать самостоятельно. Например, диапазон («W1: W4») не должен смешиваться с диапазоном («W5: W8»), поэтому я не могу просто рандомизировать диапазон («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();
};

1 Ответ

2 голосов
/ 13 февраля 2020

Поместите все значения, которые вы указали в методе getRange, внутри массива и l oop поверх него. С каждым range вызывайте методы getRange и randomize.

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, который разрешается, когда l oop готов сделать код асинхронным. Это обеспечит выполнение остальной части вашего кода.

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);

  });

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