Google电子表格的自定义功能始终返回相同的结果

时间:2014-12-11 16:16:50

标签: javascript google-sheets google-drive-api

我正在尝试构建一个简单的脚本来处理如下所示的Google电子表格:

enter image description here

它向我展示了我的哪些客户使用每层的哪些模块。每个客户可以使用他想要的模块数量。

我需要做的是计算安装了所有模块的客户数量(或三层,它们是相同的)。

我尝试使用内置函数执行此操作但未成功。

现在我正在尝试自己的功能,看起来像这样:

function countTotalModByClient(values) {

var quantMod=0;
var quantClient=0;

for (var i=0; i<values.length; i++) {
  for(var j=0; j<values.length; j++) {
    if(values[i][j]=="X") {
      quantMod++;
    }
  }

  if(quantMod==15) { // total number of modules
    quantClient++;
  }

  quantMod=0;
}

  return quantClient;
}

但它总是返回相同的结果:0。

在我的工作表中,我正在调用这样的函数:=countTotalModByClient(B3:P6)

P.S。:对于代码中的幻数,我会解决这个问题。 =)

1 个答案:

答案 0 :(得分:1)

这应该可以使用标准公式(虽然可能有点复杂)。

=countif(ArrayFormula(MMULT(--(B3:P6="X"), transpose(column(B3:P2)^0))), 15)

应该返回行中计数为15的客户端数量。 你能检查一下是否有效吗?

或者,如果您更喜欢自定义功能,请尝试一下:

function countTotalModByClient(values) {
var quantClient = 0;
for (var i = 0; i < values.length; i++) {
    if (values[i].countItem("X") === 15) quantClient += 1;
}
return quantClient;
}

Array.prototype.countItem = function (item) {
var counts = {};
for (var i = 0; i < this.length; i++) {
    var num = this[i];
    counts[num] = counts[num] ? counts[num] + 1 : 1;
}
return counts[item] || 0;
}

Example spreadsheet