示例(A 列是输入,B 列和 C 列是自动生成的):
| A | B | C |
+-------+-------+-------+
| Name | Name | Count |
+-------+-------+-------+
| Joe | Joe | 2 |
| Lisa | Lisa | 3 |
| Jenny | Jenny | 2 |
| Lisa | | |
| Lisa | | |
| Joe | | |
| Jenny | | |
我知道我可以用下面的函数来做到这一点。但是,我想用应用程序脚本来做到这一点。我试过嵌套 2 个称为 ( i
& j
) 的循环。它从哪里开始i
并j
计数,直到它不匹配i
。然后 j 等于i
所以i
只是跳到新的起点,以免重复计数,它有点工作。
我一直有一个问题,它会在最后 2 次左右的迭代中输出高数字......我认为我无法在无法使其工作后保存脚本。任何想法或帮助将不胜感激。
我想制作脚本的公式:
=ArrayFormula(QUERY(A1:A16&{"",""},"select Col1, count(Col2) where Col1 != '' group by Col1 label count(Col2) 'Count'",1))
试试这个:
它将读取带有标题的 A 列并生成带有标题的 B 和 C
function pv() {
const ss=SpreadsheetApp.getActive();
const sh=ss.getActiveSheet();
const rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
const vs=rg.getValues();
let Obj={pA:[]};
vs.forEach(function(r,i){
if(!Obj.hasOwnProperty(r[0])) {
Obj[r[0]]=1;
Obj.pA.push(r[0]);
}else{
Obj[r[0]]+=1;
}
});
let oA=[["Name","Count"]];
Obj.pA.forEach(function(p) {
oA.push([p,Obj[p]]);
});
sh.getRange(1,2,oA.length,2).setValues(oA);
}
这是一个简单的数据透视表
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句