Как мне перевести SORT и сопоставить формулу листа Google в скрипт приложения / javascript? - PullRequest
1 голос
/ 14 октября 2019

Как запустить формулу, например:

=sort(A2:F5000, match(B2:B5000,{"QTA 10 Days","QTA-REMAKE","QTA-SAMPLE","QTA NEW PROJECT","QTA NPI-CVF-Bryan","Qual-QTA-NPI Remake"},0),1)

Для диапазона полей с помощью API скриптов Google Apps для Google Sheets?

1 Ответ

0 голосов
/ 14 октября 2019

Для сортировки вашего листа вы можете использовать следующий код:

function myFunction() {
  var inSheet = SpreadsheetApp.getActive().getSheets()[0];
  var outSheet = SpreadsheetApp.getActive().getSheets()[1];

  var values = inSheet.getRange('A2:C23').getValues();
  values.sort(mySort);

  outSheet.getRange('A2:C23').setValues(values);
}


function mySort(row1, row2) {
  var values = ["QTA 10 Days","QTA-REMAKE","QTA-SAMPLE","QTA NEW PROJECT","QTA NPI-CVF-Bryan","Qual-QTA-NPI Remake"];
  var val1 = values.indexOf(row1[2]);
  var val2 = values.indexOf(row2[2]);
  return val1 - val2;
}

Вам, конечно, придется изменить диапазоны и / или листы, которые вы используете. Файл Sheets, который я использовал, это этот файл, в котором вы можете увидеть исходные значения в Sheet1 и результаты выполнения моего скрипта в Sheet2.

Сортировка по начальной подстроке шаблона

Для сортировки на основе того, начинается ли строка с «QTA» или нет, вы можете заменить приведенную выше функцию mySort на следующую:

function mySort(row1, row2) {
  var val1 = row1[2];
  var val2 = row2[2];
  var qta1 = val1.indexOf("QTA") == 1;
  var qta2 = val2.indexOf("QTA") == 1;
  if (qta1 === qta2) return  strcmp(val1, val2);
  return qta1 ? 1 : -1;
}

function strcmp(a, b) {
  if (a.toString() < b.toString()) return -1;
  if (a.toString() > b.toString()) return 1;
  return 0;
}

Эта функция будет определять приоритет строк, содержащих'QTA', и он также будет сравнивать оставшуюся часть строки в случае, если обе или ни одна не содержат подстроку. См. Лист 3 моего контрольного листа для результатов.

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