Сортировка пользовательских диапазонов скриптов Google Sheets без вставки результатов - PullRequest
0 голосов
/ 12 сентября 2018

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

Есть ли способ создать пользовательскую сортировку непосредственно для диапазона без значений set / get?

function orderMyRange() {
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  var mySheet = sh.getSheetByName("MySheet");
  var myRng = mySheet.getRange("A4:L500");
  var myData = myRng.getValues();

  myData.sort(orderCustom);
  myRng.setValues(myData);
}

1 Ответ

0 голосов
/ 12 сентября 2018

Я предлагаю вам попробовать это так:

  1. получить формулы с var formulas = myRng.getFormulas()
  2. найти способ сортировки formulas и myData таким же образом. таким образом, что если myData[12] переместится в 9 (10-я строка), то formulas сделает то же самое в var temp = formulas[9]; formulas[9] = formulas[12]. сортировать по значениям, но применять такую ​​же сортировку к formulas
  3. вставьте myData все формулы, такие как if(formulas[row][column]) myData[row][column] = formulas[row][column]
  4. используйте myRng.setValues(myData) или верните массив, если это пользовательская функция, используемая в качестве формулы в листе Google.

для алгоритма выбора сортировки это будет выглядеть примерно так:

var myData = [[1], [223], [3], [2], [345]];
var formulas = [["=ROW(A1)"], ["=ROW(A223)"], ["=ROW(A3)"], ["=ROW(A2)"], ["=ROW(A345)"]];

function Selection_Sort(arr, parr, compare_Function) {
  //arr is the value array and parr is the formula array
  function compare(a, b) {
   return a - b;
   }
  var min = 0;
  var minFormula
  var index = 0;
  var temp = 0;
  var tempFormula = "";
 //{Function} compare_Function Compare function
  compare_Function = compare_Function || compare;

  for (var i = 0; i < arr.length; i += 1) {
    index = i;
    min = arr[i][0];
    minFormula = parr[i][0];
    for (var j = i + 1; j < arr.length; j += 1) {
      if (compare_Function(min, arr[j]) > 0) {
        min = arr[j][0];
        minFormula = parr[j][0];
        index = j;
      }
    }

    temp = arr[i][0];
    tempFormula = parr[i][0];
    arr[i][0] = min;
    parr[i][0] = minFormula;
    arr[index][0] = temp;
    parr[index][0] = tempFormula;
  }

  //return sorted arr
  return [arr, parr];
}

console.log(Selection_Sort(myData, formulas, function(a, b) { return a - b; }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...