группировка повторяющихся строк, в то время как исходная сортировка остается неизменной - PullRequest
0 голосов
/ 25 апреля 2018

Скажем, у меня есть номера счетов, номера субсчетов и значения в электронной таблице Google, где могут быть дубликаты Номера счетов с различными номерами субсчетов:

acc no / sub acc no / val
2      /     5      /  6
3      /     10     /  8
4      /     9      /  2
2      /     14     /  1

После того, как яСортируйте весь лист по третьему столбцу, значения, это будет выглядеть так:

acc no / sub acc no / val
3      /     10     /  8
2      /     5      /  6
4      /     9      /  2
2      /     14     /  1

Итак, я хочу сгруппировать все счетчики под одинаковыми учетными записями, имеяисходная сортировка остается неизменной:

acc no / sub acc no / val
3      /     10     /  8
2      /     5      /  6
2      /     14     /  1
4      /     9     /  2

Похоже, что после сортировки по значениям мне нужен скрипт, который просматривает столбец учетной записи Нет, для каждой ячейки он будет проверять оставшиеся номера счетов, и если естьсовпадающий с дубликатом, он будет перемещен вверх.

Вот что я мог придумать:

function group(){

  var sheet = SpreadsheetApp.getActiveSpreadsheet();

  // find how many accounts we have 
  var Avals = sheet.getRange("A2:A").getValues();
  var Alast = Avals.filter(String).length;

  for (var i = 0; i < Alast-2; i++) {
    if(Avals[i].toString() == Avals[i+1].toString()){
      continue;
    }
    for (var j = i+2; j < Alast; j++){
      if(Avals[i].toString() == Avals[j].toString()){
        //move
        break;
      }
    }   
  }
}

Заранее спасибо!

1 Ответ

0 голосов
/ 26 апреля 2018

Это пример сценария.Непроверенные.Предполагается, что лист уже отсортирован по столбцу C.

function group(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // find how many accounts we have 
  //get A2:C range& values
  var rng = sheet.getRange(2,1,sheet.getLastRow()-1,3);
  var val = rng.getValues();
  var data =[];//output array
  var k=0; //data array new row count
  //loop through existing rows
  for(i=0;i<val.length;i++){
    //if A is not empty, new k row data array = original row.
    if (val[i][0]) { //value check
      data[k] = val[i];
      k++; //increment k to next row
    //Loop through rows after current row to find next  similar A value,if any
    for(j=i+1;j<val.length;j++) { 
      if (val[i][0] == val[j][0]) { //if one of the folllowing row's A value is == current A value
        data[k] =val[j].slice(0); //new k data array = j row
        k++; //increment k
        val[j][0] =''; //set  the duplicate  j row's A value to null to skip during value check 
      }
    }
   }
  }
//Logger.log(data);
sheet.getRange(2,1,data.length,data[0].length).setValues(data);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...