我找到了这个脚本并对其进行了一些修改,以便它在所选单元格中查找值,单独计算并返回带有结果的浏览器消息(例如" 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;
}
答案 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);
});