将不同的功能合而为一

时间:2019-07-30 20:08:09

标签: google-apps-script

我有两个单独的脚本可以工作。第一个检查一个(主)工作表中的一列与另一个(从属)工作表中的一列。如果找到匹配项,则会将该行从(从属)复制到(主)工作表。

第二个脚本比较两个数组(一个来自主数组,一个来自从属数组),如果它们不相同,则更改主数组的背景。

由于两个比较数组都有,有没有办法组合这两个函数?

以前,我已经从这些主板上获得了一些帮助,并尝试自行组合代码。但是,我对脚本的知识...特别是数组。

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工作表上

1 个答案:

答案 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);
}