用于计算所选单元格中多个不同条目的脚本

时间:2015-09-16 03:08:12

标签: google-apps-script

我找到了这个脚本并对其进行了一些修改,以便它在所选单元格中查找值,单独计算并返回带有结果的浏览器消息(例如" 100":12(时间),"不可用":5,"延迟":4等)。有人可以帮我修改该脚本,这样它也可以单独解析单个单元格中的不同值\字符串(例如,由一些特定符号分隔)。此外,它计算\的方式只返回一个标记值,然后将它们作为标记值的总和添加到结果中。

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [ {name: "Count Stuff", functionName: "countStuff"}];
  ss.addMenu("aQ", menuEntries);
}

function countStuff() {
  var s = SpreadsheetApp.getActiveSheet(),
      r = s.getActiveSelection(),
      v = r.getValues(),
      d = {},
      i = v.length - 1,
      t;

  while (i > 0) {
    if ("" === (t = v[i--][0])) {
      continue;
    }

    d[t] ? d[t]++ : (d[t] = 1);
  }

  t = "";

  for (v in d) {
    t += v + ":" + d[v] + "\n";
    i++;
  }

  i !== 0 && s.getRange(r.getLastRow() + 1, r.getLastColumn() - r.getNumColumns() + 1).setValue(i);

  Browser.msgBox(i === 0 ? "No values selected!" : t);

  delete s, r, v, d, i, t;
}

1 个答案:

答案 0 :(得分:0)

这是一个计数函数,用于分隔逗号,

它分两步进行:(1)通过将行连接在一起来展平值;在此过程中,行的每个条目都将转换为字符串并用逗号分隔。 (2)计算参赛作品;使用扁平阵列这很容易。计数保存在对象中,消息框的格式由JSON.stringify

完成
function countStuff() {
  var v = SpreadsheetApp.getActiveSheet().getActiveSelection().getValues();
  var count = {};

  if (!v.map) {
    Browser.msgBox("Select a range to count");
    return;
  }

  var flat = v.reduce(function(a, row) {
    return a.concat(row.reduce(function(a, entry) {
      return a.concat(entry.toString().split(','));  // adjust split as needed
    }, []));
  }, []);

  for (var i = 0; i < flat.length; i++) {
    count[flat[i]] = count[flat[i]] + 1 || 1;
  }

  Browser.msgBox(JSON.stringify(count));
}

如果不需要拆分,则平面阵列的计算简化为

  var flat = v.reduce(function(a, row) {
    return a.concat(row);
  });