【问题标题】:Count Reoccuring Values in Column of Google Spreadsheet Using Script使用脚本计算 Google 电子表格列中的重复值
【发布时间】:2012-08-01 15:40:43
【问题描述】:

我想使用脚本计算某个值在我的电子表格的特定列中再次出现的次数,以便在提交表单时使用该计数填充不同的列(同一行)。这些是我想计算的 B 列中的值:

6 ACM
5 ACM
4 ACM
5 CGC
7 CGC
6 ACM
7 ACM
7 ACM

如果计算正常,C 列将填充这些数字:

1
1
1
1
1
2
1
2

我知道如何读取数据以及如何写入电子表格,但我不知道如何实际计算这些值。这是我目前所拥有的:

function countif() {
   var ss = null;
  try {
    ss = SpreadsheetApp.openById("0AliYViHYAwaNdHQyMXlKT2Q5UElQY184T3BWYTRiM2c");
  } catch (ex) {
    ss = SpreadsheetApp.getActiveSpreadsheet();
  }
  var sheet = ss.getSheetByName("Sheet1");
  var lastLine = sheet.getLastRow();
  var data = sheet.getRange("B2:B").getValues();
  var count = 0;

//need help here

  sheet.getRange(lastLine,3).setValue(count);
}

谢谢!

【问题讨论】:

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


    【解决方案1】:

    把这段代码放在你的//need help 部分。

    for (var i = 0 ; i < lastLine ; i++){
      var count = 1;
      for ( var j = 0 ; j < i ; i ++) {
        if (data[j][0] == data[i][0] ){
          count++;
        }
      }
      sheet.getRange('C' + (i+1).toString()).setValue(count);
    }
    

    【讨论】:

    • 感谢您的回复。这段代码给了我一个错误:“Argument must be a range” 引用这一行: sheet.getRange('C' + i.toString()).setValue(count);
    • 试试修改后的代码。我认为问题在于第一次迭代会尝试写入 C0,这当然不存在!
    • Hhhhmmm ...现在我得到:TypeError:无法从未定义中读取属性“0”。关于这一行 if (data[j][0] == data[i][0] ){
    • 试试var data = sheet.getRange("B2:B"+lastLine).getValues();
    【解决方案2】:

    作为替代方案,您可以通过在 C1 中输入的电子表格函数来实现:

    =ArrayFormula(IF(ROW(B:B)=1;"Count";IF(LEN(B:B);MMULT((ROW(B:B)>=TRANSPOSE(ROW(B:B)))*(B:B=TRANSPOSE(B:B));SIGN(ROW(B:B)));IFERROR(1/0))))
    

    【讨论】:

    • 非常感谢亚当。我最终使用函数来使整个工作表正常工作,而这个函数使之成为可能。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多