如何使用谷歌应用程序脚本中的范围总和?

时间:2014-07-28 15:56:09

标签: google-apps-script google-sheets custom-function

我想使用谷歌应用程序脚本在谷歌电子表格中创建一个简单的自定义和公式。

 function somaDias(range, days) {
   var sum = 0;

   for(i=0; i<days; i++){
     sum = sum + range[i];
  }


    return soma;
    }

我将在一个报表中使用此函数,该报表的列中包含每月每天的货币值。我们的想法是选择整列值,将其作为范围传递,并将这些值加总到一个月中的某一天。我知道

有问题
  sum = sum + range[i];

因为,当我使用只有1的列进行测试时...返回为“0111111”

= somaDias(C9:C15; 6)//应返回6,但返回0111111

我不想使用= sum(),因为范围会根据日期而变化。我希望将该月份的30天作为范围传递,然后传递我想要总和的天数。如果我使用总和,我将不得不每天重新选择范围......

我做错了什么?

2 个答案:

答案 0 :(得分:3)

为什么不使用功能SUM()内置的电子表格? (doc here

enter image description here


编辑以下评论。

我不喜欢自定义功能,但这是实现您想要的方法:只使用1个参数=天数,它将从第一列算起。

function somaDias(days) {
  var sum = 0;
  var sh = SpreadsheetApp.getActiveSheet();
  var values = sh.getRange(sh.getActiveCell().getRowIndex(),1,1,days).getValues();

  for(var i in values[0]){
    sum += values[0][i];
  }
  return sum;
}

答案 1 :(得分:1)

如果循环显示值,可以使用下面的功能。您可以指定对象以及需要汇总的列索引。

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var range = sheet.getRange("A1:F30");
var values = range.getValues();


function sum( obj, colindex ) {
  var sum = 0;
  for( var el in obj ) {
      sum += parseFloat( obj[el][colindex] );
  }
  return sum;
}