在这里,我尝试匹配产品编号,然后搜索不匹配的功能。因此,在下面的示例中,我们在COL A-产品ID,COL B-功能,COL C-产品ID,COL D-功能中看到。我想将A-B列与C-D列进行比较。我能够匹配整个单元格,但我想获得更多的粒度并匹配单元格中的单词。因此,在下面的示例中,我想查看产品12345的结果,因为它缺少“中”功能。另外,我们会从54321获得结果,因为它缺少功能“好”。
COL A | COL B | COL C | COL D |
产品编号|功能|产品编号|功能
12345 |快中慢| 12345 |慢
12345 |快慢12345 |快速
12345 |快慢12345 |快速
54321 |努力又好12345 |辛苦
54321 |努力又好12345 |辛苦
12345 |快慢12345 |快速
到目前为止,我有以下具有2个函数的脚本,如果单元格的格式正确,但很多单元格却没有,它似乎会产生结果。我不需要2个功能,但这是我尝试实现的功能。
问题是:如何首先将A和C列完全匹配,然后,如果B列中有任何单词不在D列中,则将结果打印到COL E:F中
感谢任何帮助。
function checkProduct() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s=ss.getSheetByName("A Data - Formatted")
var lr=s.getLastRow()
var lookup = s.getRange(2,1,lr-1,5).getValues();
var s1=ss.getSheetByName("B Data - Formatted")
var lr1=s1.getLastRow()
var range = s1.getRange(2,1,lr1-1,5).getValues();
var s3=ss.getSheetByName("Matches")
s3.getRange("A2:F").clear();
var lookupRange = [];
for (var i = 0; i < lookup.length; i++) {
for (var j = 0; j < range.length; j++) {
var test=lookup[i][0]
if(lookup[i][0]==range[j][0]){
lookupRange.push([range[j][0],range[j][1],lookup[i][0],lookup[i][1],]);
}}}
s3.getRange(2,1,lookupRange.length,4).setValues(lookupRange);
}
function checknoMatch() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s=ss.getSheetByName("Matches")
var lr=s.getLastRow()
var lookup = s.getRange(2,1,lr-1,2).getValues();
var s1=ss.getSheetByName("Matches")
var lr1=s1.getLastRow()
var range = s1.getRange(2,3,lr1-1,2).getValues();
var s3=ss.getSheetByName("Differences")
s3.getRange("A2:F").clear();
var lookupRange = [];
for (var i = 0; i < lookup.length; i++) {
for (var j = 0; j < range.length; j++) {
var test=lookup[i][0]
if(lookup[i][0] == range[j][0] && lookup[i][1] != range[j][1]){
lookupRange.push([range[j][0],range[j][1],lookup[i][0],lookup[i][1],]);
}}}
s3.getRange(2,1,lookupRange.length,4).setValues(lookupRange);
}
答案 0 :(得分:1)
function getMatching(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getDataRange();
var vA=rg.getValues();
for(var i=1;i<vA.length;i++){
if(vA[i][0]==vA[i][2]){
vA[i][4]=vA[i][0];
vA[i][6]=vA[i][3];
vA[i][5]=getNonMatching({col2:vA[i][1],col4:vA[i][3]});
}
}
sh.getRange(1,1,sh.getLastRow(),sh.getLastColumn()).setValues(vA);
}
function getNonMatching(sObj){
if(sObj.col2 && sObj.col4){
var vA2=sObj.col2.split(" ");
var vA4=sObj.col4.split(" ");
vA4.push('and');//You can push other insignificant word into vA4 to keep them out of the output string.
var s='';
var n=0;
for(var i=0;i<vA2.length;i++){
if(vA4.indexOf(vA2[i])==-1){
if(n>0) {
s+=' ';
}
s+=vA2[i];
n++;
}
}
return s;
}else{
return 'Error: Invalid Inputs';
}
}
Spreadsheet Before Running:
Spreadsheet After Running: