Google表格-如何比较来自不同文档的两个数据集,以及如何从[1]复制[2]中未包含的数据

时间:2018-08-17 05:32:46

标签: google-apps-script google-sheets

当前,我们有一个电子表格用作主作业列表(1)。此工作表中的每一行代表一个包含许多信息列的作业或项目。

一个团队对满足特定条件的作业(行)进行过滤(1),然后将字段从过滤后的行复制到单独的电子表格(2)。

一旦将数据添加到电子表格(2),就会添加其他信息列来提供项目跟踪功能,因此该信息不会被(1)中的数据覆盖

目标是编写一个函数,该函数可以通过以下操作自动在(1)和(2)之间进行手动复制和粘贴:

从一组数据中检索某些已过滤的条目(1),然后将该过滤后的数据与另一组数据进行比较(2)。如果(2)缺少(1)中的任何项目,则需要将(1)的某些部分添加到(2)中。

我认为所需的步骤可以定义为:

  1. 来自文档“ 10source”工作表“ Sheet1”
  2. -检索状态为“项目(活动)”(列G)的行
  3. -排除在C列或空白C列中包含“ DJ”的行
  4. 至文档“ 10destination”表“ 10.1”
  5. -比较写入10.1,col F和10.2,colA的数据
  6. -如果在10.1中有一个条目,在10.2中没有找到col F,则col A然后将其从col F复制到列A

谢谢克里斯基勒,我从中抢了大部分代码https://gist.github.com/chrislkeller/4026676

我提供了两个文档的链接,这些文档称为样本。

// create menu buttons
function onOpen() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var menuEntries = [{
        name: "Sync Spreadsheet Data",
        functionName: "copyDataToWorkingSpreadsheet"
    }];
    ss.addMenu("Data Update Functions", menuEntries);
};

// copy data from form sheet to live mapping sheet
function copyDataToWorkingSpreadsheet() {

  // source doc
  var sss = SpreadsheetApp.openById('15yyfoAu0rgI4_n_LZ4NYbdfYNi_sfAQs4kSz_syMdVY');

  // source sheet
  var ss = sss.getSheetByName('Sheet1');
  
  // Get full range of data
  var SRange = ss.getDataRange();

  // get A1 notation identifying the range
  var A1Range = SRange.getA1Notation();

  // get the data values in range
  var SData = SRange.getValues();

  // target spreadsheet
  var tss = SpreadsheetApp.openById('15O1DFzadu7n23WxRydKht-5Xnra4YFCGOYSy0wHWjs0');
  
  // target sheet
  var ts = tss.getSheetByName('10.1'); 

  // set the target range to the values of the source data
  ts.getRange(A1Range).setValues(SData);
 
  // pick column G to remove unwanted rows
  var r = ts.getRange('G:G');
  var v = r.getValues();
  for(var i=v.length-1;i>=0;i--)
    if(v[0,i]!= 'Project (Active)')
      ts.deleteRow(i+1); 
};

0 个答案:

没有答案