示例(输入了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))
答案 0 :(得分: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);
}
这是一个简单的数据透视表