Как получить отдельные суммы для каждого отдельного столбца с помощью Google Script? - PullRequest
0 голосов
/ 22 февраля 2020

enter image description here

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

  function countNutrients(){

  var sh = SpreadsheetApp.getActiveSheet();
  var lastcol = sh.getLastColumn(); //Get last column
  var lastcolval = sh.getRange(1, 1, 1, lastcol).getValues();
  var lastrowval = sh.getRange("C1:C").getValues(); //Trick to get last row
  var lastrow = lastrowval.filter(String).length;   //
  var sumvalues = sh.getRange(2, 14, lastrow, lastcol).getValues();
    (typeof sumvalues === 'number' ? "" : sumvalues);
    Logger.log(sumvalues);
    for (var j = 13; j < lastcolval.length ; j++) {
       var sumcolumnval = sh.getRange(2, [j], lastrow);
       var sum = 0;
       for (var i in sumcolumnval[0]) {
       var sum = sumvalues[0][i] + sum;
     }
     return sum
     Logger.log(sum);
  }
  return sumcolumnval

}

Столбцы на скриншоте и еще 65

введите здесь описание ссылки

Пример CSV

1 Ответ

1 голос
/ 22 февраля 2020

Сумма столбцов со сценарием

function sumOfCols() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet14');
  var hA=sh.getRange(1,1,1,sh.getLastColumn()).getValues()[0];
  var sum={};
  hA.forEach(function(h,i){sum[h]=0;});
  var rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
  var v=rg.getValues();
  v.forEach(function(r,i){r.forEach(function(c,j){sum[hA[j]]+=c;});});
  var html='';
  hA.forEach(function(h,i){html+=Utilities.formatString('<br />%s(sum): %s',h,sum[h]);});
  var ui=HtmlService.createHtmlOutput(html);
  SpreadsheetApp.getUi().showModelessDialog(ui, "Column Sums")
}

Электронная таблица:

enter image description here

Диалог вывода:

enter image description here

Данные (csv):

COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10
1,2,3,4,5,6,7,8,9,10
2,3,4,5,6,7,8,9,10,11
3,4,5,6,7,8,9,10,11,12
4,5,6,7,8,9,10,11,12,13
5,6,7,8,9,10,11,12,13,14
6,7,8,9,10,11,12,13,14,15
7,8,9,10,11,12,13,14,15,16

Функция для вашего конкретного приложения

Суммирует только шесть выбранных вами столбцов

function countNutrients(){
  var sh=SpreadsheetApp.getActiveSheet();
  var hA=sh.getRange(1,14,1,6).getValues()[0];
  var sum={};
  hA.forEach(function(h,i){sum[h]=0;})
  var vA=sh.getRange(2,14,sh.getLastRow()-1,6).getValues();
  vA.forEach(function(r,i){
    r.forEach(function(c,j){
      if(!isNaN(c)) {
        sum[hA[j]]+=c;
      }
    });
  });
  var html="";
  var keys=Object.keys(sum);
  keys.forEach(function(k,i){
    html+=Utilities.formatString('<br />sum[%s]=%s',k,sum[k]);
  })
  var ui=HtmlService.createHtmlOutput(html);
  SpreadsheetApp.getUi().showModelessDialog(ui,'Sums of Cols N through S')
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...