【问题标题】:display value if reached a certain numbers using google script如果使用谷歌脚本达到特定数字,则显示值
【发布时间】:2019-07-17 05:21:04
【问题描述】:

我有一个包含日期列的谷歌表格,如果我的列上的值达到 4 次(例如 2019 年 7 月 1 日),我无法显示或设置单元格的值

      Date Column
Row1: July 1, 2019
Row2: July 2, 2019
Row3: July 1, 2019
Row4: July 4, 2019
Row5: July 1, 2019
Row6: July 1, 2019
Row7: July 5, 2019

我已经在谷歌脚本中尝试了以下代码:

  function countDate(){

    var ss = SpreadsheetApp.openByUrl(url);
    var ws = ss.getSheetByName("Test_Data");
    var dateRg = ws.getRange(1, 9, ws.getLastRow(), 1).getValues();

    for (var i =1; i < dateRg.length; i++){
      var dateTest = dateRg[i];

      if (dateTest > 5){
         ws.getRange(2,4).setValue(dateTest);
    }
  }   

在上面的示例中,我希望电子表格中的一个单元格具有值“2019 年 7 月 1 日”,因为它在列中出现了 4 次。提前谢谢你。

【问题讨论】:

  • 有一个类似的帖子stackoverflow.com/questions/17372322/…,也许它可以帮助
  • 谢谢 Ed Bangga。但据我在帖子中了解,它正在寻找重复或不重复。虽然我的数据也有重复,但如果列中的值达到 4 次,我需要代码来计算。对不起,我只是编程中的菜鸟。谢谢。
  • 或者为了更简单,我只需要列中出现 4x 的值。谢谢

标签: javascript google-apps-script duplicates countif


【解决方案1】:

这是一种可能的方法。计算每个日期的出现次数,将计数存储在一个对象中,然后找到出现次数最多的日期。

function countDate(){  
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Test_Data");
  var dateRg = ws.getRange(1, 1, ws.getLastRow(), 1).getDisplayValues();
  var data = {}
  for (var i =0; i < dateRg.length; i++){
    data[dateRg[i]] = data[dateRg[i]] || 0;
    data[dateRg[i]]++;  
  }
  var max = Object.keys(data).reduce(function(a, b){ return data[a] > data[b] ? a : b });  
  ws.getRange(2,4).setValue(max);
}

【讨论】:

  • 非常感谢。我还有一个问题。如果我有多个日期达到 4 次怎么办?在您的代码中,您只显示了最大出现次数。是否可以显示或设置所有这些日期的值?非常感谢您提前
  • 是的,这是可能的。您必须修改代码以确定出现次数最多的多个条目。
  • 你有示例代码吗?对不起,我是编程新手。我一直在试图弄清楚如何修改您的代码,但我没有成功。谢谢。
  • 我也尝试使用此链接中的答案但也不成功:stackoverflow.com/questions/48927567/…
  • 我不能有其他解决方案吗?请帮忙。急需..谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
相关资源
最近更新 更多