如何编写一个简单的计数,如果

时间:2019-09-26 00:14:17

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

我试图找到这个,但是我无法找出发布的其他问题的答案。我有两个条件用于对数据进行排序。一年中的月份,如果它是1、2或3。

我需要的是摘要页面,以计算特定排名每个月有多少输入

我希望所有这些都有意义,我试图尽我所能来阐明,我对此实在感到不知所措,并且没有任何类型的编码/脚本经验。 感谢您的帮助!

我使用下面的代码返回数据的日期和等级以及提取月份。 然后,它将使用if语句中的那几个月放入摘要页面。我不知道该怎么做,是在这里放一个计数公式。像这里的这段代码一样,我希望它类似于公式if = month = 1和tiers(ranks)= 1然后进行计数(它不能添加,因为如果添加,页面更新时它将添加到已经计算的数字中)

    for(var i =8;i<=j;i++) { //loops through a data table to see dates and ranks
    var dates = oppwon.getRange(i,22).getValue();
    var tiers = oppwon.getRange(i,14).getValue();
    var month = new Date(dates).getMonth()+1;

    switch (true){
      case((month==1)): //if it is january
         if(tiers==1)  // if it is rank 1
           jan1.setValue(); 
         if(tiers==2)
           jan2.setValue();

2 个答案:

答案 0 :(得分:2)

代替循环中的setValue,您应该考虑在变量/秒内进行计数,并且仅在循环完成后才对setValue进行计数。

以下建议的一些代码:

for(var i =8;i<=j;i++) { //loops through a data table to see dates and ranks
var dates = oppwon.getRange(i,22).getValue();
var tiers = oppwon.getRange(i,14).getValue();
var month = new Date(dates).getMonth()+1;
var countTiers = {}; //count by tiers of months

countTiers[`m${month}`][`t${tiers}`]++;

您最终将得到一个对象,例如循环后{m1:{t1:2,t2:1}}。

然后,您可以在所需列中设置Value作为最终计数。

答案 1 :(得分:1)

您可以定义一个函数

function countTiersByMonth ( dataTable, firstline, lastline ) {
    var result = [ [0,0,0],[0,0,0],[0,0,0], [0,0,0],[0,0,0],[0,0,0], [0,0,0],[0,0,0],[0,0,0], [0,0,0],[0,0,0],[0,0,0] ];
    var dates;
    var tiers;
    var month;
    for(i = firstline; i<=lastline; i++) { 
        dates = dataTable.getRange(i,22).getValue();
        tiers = dataTable.getRange(i,14).getValue();
        month = new Date(dates).getMonth();

        switch (tiers){ // we filter by tiers because it seems that you only care about
                        // tiers 1, 2, 3 wheras you care about all the months
            case 1: 
            case 2:
            case 3:
                result[month][tiers-1]++; //+1 for the respective tier
                                          //  of the respective month
                break;      //other tiers are ignored
        };
    };
    return result;
};

这将获取数据表,第一行(在示例中为8)和最后一条相关行(在示例中为“ j”),并输出一个包含12个元素的数组,每个月一个,每个元素包含3个元素,即您要计数的每一层。 如果需要,可以说5月的结果,您可以致电

tierlist = countTiersByMonth(oppwon, 8, j) // We do the counting here
print(tierlist[4][0]) // arrays start at 0, so May -> [4], Tier 1 -> [0]
print(tierlist[4][1]) // May, Tier 2
print(tierlist[4][2]) // May, Tier 3