所以我在google电子表格中有2列,A和B,我想逐行比较它们(A1到B1,A2到B2等),最后计算具有完全相同值的单元格数量(可以是字符串或整数,但必须相同)并将其放在另一个单元格中,例如D1。这是我到目前为止所得到的,但似乎没有做任何事情,并且也没有返回任何错误。
function compare() {
var sss = SpreadsheetApp.getActiveSpreadsheet();
var ss = sss.getSheetByName('theSheetINeed');
var range1 = ss.getRange('A1:A'); //the first column
var data1 = range1.getValues();
var range2 = ss.getRange('B2:B'); //the second column
var data2 = range2.getValues();
var count = []; //to count the number of match
for(var i =0;i 'smaller than' data1.length; i++){ //somehow i cant use '<'
var abc = data1[i];
var def = data2[i];
if(abc == def){
count += count;
};
};
ss.getRange('D1').setValue(count.length);
}
编辑:所以我的代码实际上做了一些事情,每次都返回0 ...
答案 0 :(得分:1)
getValues()
检索的值是二维数组。count
被定义为数组。但它不用作数组。i 'smaller than' data1.length
是i<data1.length
。&& abc && def
。)您的脚本可以通过修改以上几点来编写。
function compare() {
var sss = SpreadsheetApp.getActiveSpreadsheet();
var ss = sss.getSheetByName('theSheetINeed');
var range1 = ss.getRange('A1:A'); //the first column
var data1 = range1.getValues();
var range2 = ss.getRange('B2:B'); //the second column
var data2 = range2.getValues();
var count = []; //to count the number of match
for(var i=0; i<data1.length-1; i++){ //somehow i cant use '<'
var abc = data1[i][0];
var def = data2[i][0];
if(abc == def && abc && def){
count.push(abc);
};
};
ss.getRange('D1').setValue(count.length);
}
如果我误解了你的问题,我很抱歉。
答案 1 :(得分:1)
需要在后台运行的Apps脚本的替代方案,您可以使用开箱即用的公式执行此操作,因此结果是实时的
=SUM(
QUERY(
FILTER(A1:B,A1:A<>"",A1:A<>0),
"Select count(Col1)
Where Col1=Col2
Group By Col1
Label count(Col1) ''"
,0)
)
基于公式的解决方案的优势在于它们更加醒目,任何关注您的人都可以确定答案是正确的,而不必知道他们必须运行脚本来实现这一目标。
打破公式并从中间开始:
FILTER(A1:B, A1:A<>"", A1:A<>0)
这将返回存在非空单元格的所有行。我这样做是因为QUERY
可能会误导查找空白单元格
"Select count(Col1)
Where Col1=Col2
Group By Col1
Label count(Col1) ''"
这会进行您要求的比较,并返回A中与B匹配的每个值的计数。Select
此处使用Col1
代替A
,因为FILTER
返回一个数组而不是一个数组
范围。
从那时起,SUM
将每个总数加起来。