Есть ли способ отображения значений, отличных от даты? - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь получить данные по вертикали и отобразить их горизонтально со столбцом между каждым значением.

Вот пример данных:

Вот то, что я пытаюсьчтобы заставить это сделать:

Я пытался исчерпать все, что я в настоящее время знаю, чтобы понять это, но я не могу понять это, и я считаю, что эту проблему легко решить.Мне просто не очень повезло с моими ключевыми словами в Google.

ps: только что заметил, что некоторые столбцы все еще скрыты.В этом случае давайте представим, что столбцы в примерах A / B / C / D / E.

1 Ответ

0 голосов
/ 31 декабря 2018

Суммирование идентичных дат в нескольких строках в отдельные столбцы в одной и той же строке

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

Я предполагаю, что, как только вы дадите лучшее объяснение того, что вы пытаетесь выполнить, и как это должно работать, вы можетеполучите ответы, которые намного проще понять.

В любом случае, я предлагаю это решение как возможность, с которой вы можете начать, если хотите.Я использую объект ключ / значение для отслеживания количества идентичных дат, и если метод dObj.hasOwnProperty () возвращает false, то это также помогает определить новые даты.

Код:

function condenseDates(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('sheet name');//you need to change this for the appropriate sheet name
  var rg=sh.getDataRange();//get all data values including headers
  var vA=rg.getValues();
  var dObj={};//data object which is used to identify new new dates and keep track of the run columns for identical dates.
  var d=0;//delete counter
  for(var i=1;i<vA.length;i++){
    if(dObj.hasOwnProperty(vA[i][0])) {//if it does not have this property then it is a new date
      dObj[vA[i][0]]=Number(dObj[vA[i][0]])+1;//if it does have this property then increment the DObj value which keeps track of the run column it will go into
      var rg=sh.getRange(1,2 + Number(dObj[vA[i][0]]));//this is the header column cell for this dObj column
      if(rg.isBlank()){//if it is blank then write a new one
        rg.setValue('Run' + dObj[vA[i][0]]);
      }
      sh.getRange(Number(dObj.currentRow),2 + Number(dObj[vA[i][0]])).setValue(vA[i][1]);//put value for this line in the appropriate column in the currentRow   
      sh.deleteRow(i-d+1);//delete this line
      d++;//increment the delete counter
    }else{//it is a new date
      dObj[vA[i][0]]=1;
      dObj['currentRow']=i-d+1;//Current Data Row
      var rg=sh.getRange(1,3);
      if(rg.isBlank()){//if header has no label in the first run column then write it
        rg.setValue('Run' + 1);
      }
      sh.getRange(Number(dObj.currentRow),2 + Number(dObj[vA[i][0]])).setValue(vA[i][1]);//write data in the appropriate column in this case it is always column3 
    }
  }
  sh.deleteColumn(2);
}

Пример электронной таблицы перед запуском сценария:

enter image description here

Пример электронной таблицы после запуска сценария:

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

enter image description here

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

function condenseDates(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('36');//you need to change this for the appropriate sheet name
  var rg=sh.getDataRange();//get all data values including headers
  var vA=rg.getValues();
  var dObj={};//data object which is used to identify new new dates and keep track of the run columns for identical dates.
  var d=0;//delete counter
  for(var i=1;i<vA.length;i++){
    if(dObj.hasOwnProperty(vA[i][0])) {//if it does not have this property then it is a new date
      dObj[vA[i][0]]=Number(dObj[vA[i][0]])+1;//if it does have this property then increment the DObj value which keeps track of the run column it will go into
      var rg=sh.getRange(1,2 + Number(dObj[vA[i][0]]));//this is the header column cell for this dObj column
      if(rg.isBlank()){//if it is blank then write a new one
        rg.setValue('Run' + dObj[vA[i][0]]);
      }
      sh.getRange(Number(dObj[vA[i][0].toString()+'currentRow']),2 + Number(dObj[vA[i][0]])).setValue(vA[i][1]);//put value for this line in the appropriate column in the currentRow   
      sh.deleteRow(i-d+1);//delete this line
      d++;//increment the delete counter
    }else{//it is a new date
      dObj[vA[i][0]]=1;
      dObj[vA[i][0].toString()+'currentRow']=i-d+1;//A unique Current Data Row for each date when additional identical dates will expand into additional columns.
      var rg=sh.getRange(1,3);
      if(rg.isBlank()){//if header has no label in the first run column then write it
        rg.setValue('Run' + 1);
      }
      sh.getRange(Number(dObj[vA[i][0].toString()+'currentRow']),2 + Number(dObj[vA[i][0]])).setValue(vA[i][1]);//write data in the appropriate column in this case it is always column3 
    }
  }
  sh.deleteColumn(2);
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...