【问题标题】:Copy row values to a new sheet if it exist in another sheet如果行值存在于另一个工作表中,则将其复制到新工作表
【发布时间】:2014-10-28 23:30:53
【问题描述】:

我是 Google 脚本的新手,我有一个脚本要创建。我找到了这个question,如果行中的值存在于另一张表中,他应该删除行。现在,我的情况不同了。这是我的示例Spreadsheet。在那个谷歌电子表格中,我有 3 张纸。将在前 2 张纸上比较的唯一值是第一列“ID NUMBER”。

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

总结一下,如果那个 ID NUMBER 存在于 Sheet 1 和 Sheet 2 中,它应该被复制到 Sheet 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);
   }

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

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    不确定您的条件是否有效...在两张表中获取相等的值比您引用的示例更容易,只需将数据保留在相等==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);
    }
    

    【讨论】:

    • 嗨@Serge insas。它完美地工作!我发现我哪里弄错了。谢谢你的回答。
    • 我有一个后续问题。如果我不想将重复值复制到表 3,而是想从表 1 和表 2 中删除它们,该怎么办?谢谢。
    • 避免跟进问题,请改用新问题。我的第二个问题与原来的帖子是如此不同,没有人能找到它......
    • 对不起@Serge insas。我创建了一个关于我的后续问题的新问题。我希望你能帮助我。
    【解决方案2】:

    试试:

    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);
    

    【讨论】:

    • 嗨@Stefan。也可以使用 Serge 的答案。我很感激你的回答。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多