Для сортировки вашего листа вы можете использовать следующий код:
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 моего контрольного листа для результатов.