Как отсортировать ячейки листов по значениям, примененным в ГАЗе? - PullRequest
0 голосов
/ 01 марта 2019

Столбец А моего листа имеет значения статуса [Yes,Pending,No,Withdrawn] в форме раскрывающегося списка.Я хотел бы отсортировать по этим значениям, но порядок, в котором они будут отсортированы, не является алфавитным.

В настоящее время я использую вспомогательный столбец с формулами IFS на листе, который применяет числовое значение к каждому статусу и сортирует их в этом порядке.Я предполагаю, что я могу использовать сценарий, чтобы выполнить это, не нуждаясь в вспомогательном столбце на моем листе.

Из других несколько похожих вопросов, которые я собрал, для этого можно использовать функцию сравнения, но мои знания ГАЗА довольно вводные.

1 Ответ

0 голосов
/ 02 марта 2019

Я думаю, что использование вспомогательного столбца, безусловно, самый простой вариант.Вы можете «спрятать» столбец, чтобы он не мешал.(Щелкните правой кнопкой мыши -> Скрыть столбец).

Но вы можете сделать это с помощью скрипта, используя функцию сравнения!Вот пример реализации.Это немного слишком многословно, в надежде быть объяснительным и адаптируемым к вашему конкретному случаю использования.

Code.gs

// get active spreadsheet
var ss = SpreadsheetApp.getActive();

// define mapping of status to custom values
var mapping = {
  Yes: 1,
  No: 2,
  Pending: 3,
  Withdrawn: 4
};

// define range of values to sort & which one is "status"
var sortRange = "A2:B20";
var statusCol = 0;

/**
 * Sort defined range by status, using defined mapping
 * See: https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
 */
function sortData() {
  // select sheet
  var sheet = ss.getSheets()[0];

  // select range
  var range = sheet.getRange(sortRange);

  // get values (array of arrays)
  var data = range.getValues();
  Logger.log("\ndata pre-sort: %s\n\n", data);

  // sort using custom compare function
  data.sort(sortFcn_);
  Logger.log("\ndata post-sort: %s\n\n", data);

  // write values back to spreadsheet
  range.setValues(data);
}

/**
 * Custom compare function used by sortRange
 * See: https://www.w3schools.com/jsref/jsref_sort.asp
 */
function sortFcn_(rowA, rowB) {
  // get "status" from row (array lookup by integer)
  var aStatus = rowA[statusCol];
  var bStatus = rowB[statusCol];

  // convert status msg to value (object lookup by key)
  var aValue = mapping[aStatus];
  var bValue = mapping[bStatus];

  // sort in ascending order
  return aValue - bValue;
}

Теперь вам просто нужно выяснить, как вызвать «sortData»в нужное время.Несколько вариантов см .:

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