如果行值存在于另一个工作表中,则将行值复制到新工作表

时间:2014-10-28 07:43:31

标签: google-apps-script google-sheets

我是Google Script的新手,我有一个要创建的脚本。我找到了这个question,如果其中的值存在于另一个工作表中,他应该删除行。现在,我的情况有所不同。这是我的样本Spreadsheet。在Google电子表格中,我有3张。将在前两张纸上比较的唯一值是第一列," ID NUMBER"。

鉴于这些值,前两张纸中存在784 | John Steep | I.T Department,因此应将整行复制到sheet3。

总结一下,如果工作表1和2中存在该ID号,则应将其复制到工作表3上。

我尝试修改脚本,但我无法使其正常工作:

function copyRowtoSheet3() { 
  var s1 = SpreadsheetApp.openById("1RlQTLZyPLasoJGplKemKg9qgcLcvCZZ_tPn6lWXEePw").getSheetByName('Sheet1');
  var s2 = SpreadsheetApp.openById("1RlQTLZyPLasoJGplKemKg9qgcLcvCZZ_tPn6lWXEePw").getSheetByName('Sheet2'); 
  var s3 = SpreadsheetApp.openById("1RlQTLZyPLasoJGplKemKg9qgcLcvCZZ_tPn6lWXEePw").getSheetByName('Sheet3'); 

  var values1 = s1.getDataRange().getValues();
  var values2 = s2.getDataRange().getValues();

  var resultArray = [];

      for(var n in values1){
        var keep = true
            for(var p in values2){
                  if( values1[n][0] == values2[p][0] && values1[n][1] == values2[p][1]){
                  keep=false ; break ;
                   }
           }
      if(keep){ 
         resultArray.push(values1[n])};
      }
   s1.clear()

   s1.getRange(1,1,resultArray.length,resultArray[0].length).setValues(resultArray);
   }

感谢。非常感谢任何帮助/建议。

2 个答案:

答案 0 :(得分:1)

不确定您的条件是否有效...在两个工作表中获取相同的值比您引用的示例更容易,只需将数据保持在equality == true。

尝试这样(将ID改为你的):

function copyRowtoSheet3() { 
  var s1 = SpreadsheetApp.openById("1x8buwr______w7MeqZAiJJIX0yC-oITBAtykBAM").getSheetByName('Sheet1');
  var s2 = SpreadsheetApp.openById("1x8buwr______w7MeqZAiJJIX0yC-oITBAtykBAM").getSheetByName('Sheet2'); 
  var s3 = SpreadsheetApp.openById("1x8buwr______w7MeqZAiJJIX0yC-oITBAtykBAM").getSheetByName('Sheet3'); 
  var values1 = s1.getDataRange().getValues();
  var values2 = s2.getDataRange().getValues();
  var resultArray = [];
  for(var n=0; n < values1.length ; n++){
    var keep = false;
    for(var p=0; p < values2.length ; p++){
      Logger.log(values1[n][0]+' =? '+values2[p][0]);
      if( values1[n][0] == values2[p][0] && values1[n][1] == values2[p][1]){
        resultArray.push(values1[n]);
        Logger.log('true');
        break ;// remove this if values are not unique and you want to keep all occurrences...
      }
    }
  }  
  s3.getRange(+1,1,resultArray.length,resultArray[0].length).setValues(resultArray);
}

答案 1 :(得分:0)

尝试:

var s1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet 1');
var s2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet 2');
var s3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet 3');

并进一步:

s3.clear()

s3.getRange(1,1,resultArray.length,resultArray[0].length).setValues(resultArray);