我有两个单独的脚本可以工作。第一个检查一个(主)工作表中的一列与另一个(从属)工作表中的一列。如果找到匹配项,则会将该行从(从属)复制到(主)工作表。
第二个脚本比较两个数组(一个来自主数组,一个来自从属数组),如果它们不相同,则更改主数组的背景。
由于两个比较数组都有,有没有办法组合这两个函数?
以前,我已经从这些主板上获得了一些帮助,并尝试自行组合代码。但是,我对脚本的知识...特别是数组。
var MSsId='Master_Sheet_ID';
var mshName='Sheet1';
var DSsId='Dependent_Sheet_ID';
var dshName='Sheet2';
function findMatchesAndCopy() {
var mss=SpreadsheetApp.openById(MSsId);
var msh=mss.getSheetByName(mshName)
var mrg=msh.getRange(3,1,msh.getLastRow()-2,5);
var mvA=mrg.getValues();
var dss=SpreadsheetApp.openById(DSsId);
var dsh=dss.getSheetByName(dshName);
var drg=dsh.getRange(3,1,dsh.getLastRow()-2,5);
var dvA=drg.getValues();
var mmA=mvA.map(function(r){return(r[0])});
for(var i=0;i<dvA.length;i++) {
var idx=mmA.indexOf(dvA[i][0]);
if(idx>-1){
mvA[idx]=dvA[i];
}
}
mrg.setValues(mvA);
}
// var bgs=mrg.getBackgrounds(); This is the code
// for(var i=0;i<bgs.length;i++) { that checks the
// for(var j=0;j<bgs[i].length;j++) { array background.
// if(mvA[i][j]!=dvA[i][j]) { I can't figure out
// bgs[i][j]='#ffff00'; how to adapt and insert
// } this into the rest of
// } the code
// }
// mrg.setBackgrounds(bgs);
//
简而言之,我想让此脚本将一个Dependent工作表与Master工作表进行比较...如果有任何差异,请将其复制并突出显示在Master工作表上
答案 0 :(得分:1)
组合:
var MSsId='Master_Sheet_ID';
var mshName='Sheet1';
var DSsId='Dependent_Sheet_ID';
var dshName='Sheet2';
function findMatchesAndCopy() {
var matches=[];
var differences=[];
var mss=SpreadsheetApp.openById(MSsId);
var msh=mss.getSheetByName(mshName)
var mrg=msh.getRange(3,1,msh.getLastRow()-2,5);
var mvA=mrg.getValues();
var bgs=mrg.getBackgrounds();
var dss=SpreadsheetApp.openById(DSsId);
var dsh=dss.getSheetByName(dshName);
var drg=dsh.getRange(3,1,dsh.getLastRow()-2,5);
var dvA=drg.getValues();
var mmA=mvA.map(function(r){return(r[0])});
for(var i=0;i<dvA.length;i++) {//This is looping over the Dependant sheet
var idx=mmA.indexOf(dvA[i][0]);
if(idx>-1){
mvA[idx]=dvA[i];
matches.push({idx:idx,mv:mvA[idx],dv:dvA[i]});
}
}
mrg.setValues(mvA);
Logger.log('\nmatches: %s',matches);
var bgs=mrg.getBackgrounds();
for(var i=0;i<bgs.length;i++) {//this is looping over the Master Sheet
for(var j=0;j<bgs[i].length;j++) {
if(mvA[i] && dvA[i] && mvA[i][j]!=dvA[i][j]) {
bgs[i][j]='#ffff00';
differences.push({r:i+2,c:j+1,mv:mvA[i][j],dv:dvA[i][j]});
}
if(mvA[i] && !dvA[i]) {
bgs[i][j]='#ffff00';
differences.push({r:i+2,c:j+1,mv:mvA[i][j],dv:'No Data'});
}
}
}
mrg.setBackgrounds(bgs);
Logger.log('\ndifferences: %s',differences);
}