如何使用应用程序脚本逐行汇总?

时间:2015-05-20 15:51:51

标签: google-sheets google-spreadsheet-api

我试图逐行求和并在各个行的总计单元格中包含值。 我尝试在应用脚本中循环。但不可能。任何人都可以帮我这个吗?

我有来自b3:f16的这些数据,我需要在h3:h16

中计算总数
1906    904     106 221 1640
1771    842      97 188 1338
3221    1005    252 260 6323
3239    1141    317 287 7828
3556    1409    352 337 8890
3417    1307    303 382 7143
3264    1824    358 444 9288
2724    1916    196 395 3462
2641    1829    151 430 3255
4076    1858    398 471 12844
3986    2098    468 426 13411
4829    2504    422 514 14449
4462    4876    452 507 13285
5017    6654    423 410 7765 

代码:

function adder() {
  var sheet = SpreadsheetApp.getActiveSheet().getSheetByName("sheet1");
  var data = sheet.getRange("B3:F16").getValues();
  var range = sheet.getRange("H3:H16");

  for(var i = 0; i < data.length; i++) {
    var sum = 0;
    for(var j = 0; j < data[i].length ; j++) {
      sum += data[i][j];
    }
   range.setValue(sum);
   Logger.log(sum);
  } 
}

1 个答案:

答案 0 :(得分:0)

这可以用MMULT来完成..

在G3中,尝试:

=ArrayFormula(mmult(B3:F16, transpose(column(B3:F3)^0)))

如果您想使用脚本,请查看是否有效:

function adder() {
var sheet = SpreadsheetApp.getActive()
    .getSheetByName("sheet1"),
    res = [];
    sheet.getRange("B3:F16")
        .getValues()
        .forEach(function (r) {
            res.push([r.reduce(function (a, b) {
                return a + b;
            })])
        });
sheet.getRange("H3:H16")
    .setValues(res);
}

或使用&#39; classic&#39; for循环:

function adder2() {
var sheet = SpreadsheetApp.getActive()
    .getSheetByName("Test"),
    res = [],
    sum,
    data = sheet.getRange("B3:F16")
        .getValues();
for (var i = 0, rlen = data.length; i < rlen; i++) {
    sum = 0;
    for (var j = 0, clen = data[0].length; j < clen; j++) {
        sum += Number(data[i][j])
    }
    res.push([sum])
}
sheet.getRange("H3:H16")
    .setValues(res);
}