在Google Apps脚本中使用范围

时间:2014-01-28 20:18:03

标签: javascript google-apps-script google-sheets

我正在Google Spreadsheets中编写一个简单的函数。 我想在参数中输入两个范围:

=EctsPartial(C3:C4, E3:E4)

我写了以下函数:

function EctsPartial(rangeA, rangeB) {

  Logger.log(rangeA+"  "+rangeB);
  var noten = SpreadsheetApp.getActiveSheet().getRange(rangeA).getValues();
  var ects = SpreadsheetApp.getActiveSheet().getRange(rangeB).getValues();

  for(var i=0; i < SpreadsheetApp.getActiveSheet().getRange(rangeB).getHeight(); i++){

      if(noten[i] != "" && noten[i] != 5) {
      summe = summe - 0;
      ects[i] = ects[i] - 0;

      summe = summe + ects[i];
   }
    Logger.log(i+":");
    Logger.log(summe);
   } 

  return summe;  

};

但程序一直告诉我getRange()的参数不正确。如果我手动输入“C3:C4”(包括“)它可以正常工作,但不会。 我做错了什么?

2 个答案:

答案 0 :(得分:1)

我认为这就是你要做的。这适用于自定义电子表格功能。

在电子表格中,以下代码允许您输入=EctsPartial(C1)而不是=EctsPartial("C1")。如果您在脚本上放置return noten,它将获得C1的值

function EctsPartial(rangeA, rangeB) {
  if (rangeA.map) {
    return rangeA.map(EctsPartial);
  } else {
    var noten = rangeA;
  }
}

https://developers.google.com/apps-script/guides/sheets/functions#optimization

答案 1 :(得分:0)

有两个选项包括:

1

=EctsPartial("C3:C4"; "E3:E4")

.GS:

function EctsPartial(rangeA, rangeB) {
  var noten = SpreadsheetApp.getActiveSheet().getRange(rangeA).getValues();
  var ects = SpreadsheetApp.getActiveSheet().getRange(rangeB).getValues();
  var sum = 0;
  noten.forEach(function(value) {
    sum += value[0];
  });
  ects.forEach(function(value) {
    sum += value[0];
  });
  return sum;
}

enter image description here

2

=EctsPartial(C3:C4; E3:E4)

.GS:

function EctsPartial(rangeA, rangeB) {
  var sum = 0;
  rangeA.forEach(function(value) {
    sum += value[0];
  });
  rangeB.forEach(function(value) {
    sum += value[0];
  });
  return sum;
}

enter image description here