Google sheets Google sheets-循环搜索列,选择tow

Google sheets Google sheets-循环搜索列,选择tow,google-sheets,Google Sheets,我有一个谷歌电子表格,我还有最后一个我似乎无法解决的问题 我在这个脚本中添加了一个按钮,当我按下按钮时,它会触发AddClient函数 如何使下面的脚本向下循环第3列中的所有行,搜索yes值,当它找到该值时,将其下面的行复制到工作表“client”中,然后停止 function AddClient(event) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var s = event.source.getActiveSheet();

我有一个谷歌电子表格,我还有最后一个我似乎无法解决的问题

我在这个脚本中添加了一个按钮,当我按下按钮时,它会触发AddClient函数

如何使下面的脚本向下循环第3列中的所有行,搜索yes值,当它找到该值时,将其下面的行复制到工作表“client”中,然后停止

function AddClient(event) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "SETUP" && r.getColumn() == 3 && r.getValue() == "yes")     {
    var row = r.getRow() + 1; // Add 1 to the active row
    var targetSheet = ss.getSheetByName("client");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 2, 1, 4).copyTo(target,  {contentsOnly:true}); //Only selecting column 2, then the following 4 columns
  }
}
编辑* 示例文件:

非常感谢您的帮助

干杯, 雷尔
  • 因为您有一个静态表单,所以要复制的信息的位置不会改变
  • 因为我们知道我们想要复制数据,所以我们不需要对我们的位置进行任何验证,这样所有的数据都可以被复制
  • 工作表有一个
    appendRow
    方法,负责查找最后一行所涉及的簿记工作
  • 这使我们可以将脚本简化为以下内容:

    function AddClient() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var data = ss.getSheetByName("SETUP").getRange(25, 2, 1, 4).getValues()[0];
      ss.getSheetByName("client").appendRow(data);
    }
    
    function AddClient() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var data = ss.getSheetByName("SETUP").getRange(25, 2, 1, 4).getValues()[0];
      var clients = ss.getSheetByName("client").getDataRange().getValues();
    
      if (!clients.filter(function(row) {return data.join("|") === row.join("|");})) {
        ss.getSheetByName("client").appendRow(data);
      }  
    }
    
    编辑: 要删除重复项,可以执行以下操作:

    function AddClient() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var data = ss.getSheetByName("SETUP").getRange(25, 2, 1, 4).getValues()[0];
      ss.getSheetByName("client").appendRow(data);
    }
    
    function AddClient() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var data = ss.getSheetByName("SETUP").getRange(25, 2, 1, 4).getValues()[0];
      var clients = ss.getSheetByName("client").getDataRange().getValues();
    
      if (!clients.filter(function(row) {return data.join("|") === row.join("|");})) {
        ss.getSheetByName("client").appendRow(data);
      }  
    }
    

    请注意,对于特定示例,由于前导零被截断,因此存在一些问题。工作表有点奇怪,有时甚至当您将单元格格式设置为文本时,也会试图强制格式为数字…

    您试图设计的交互是什么?有人在第三列输入“是”,该行被复制到另一个工作表?对不起,现在我更不清楚了,你是否有一个按钮,脚本会用“是”复制所有内容,还是到处都有“是”按钮,每行都有一个按钮?也许一个屏幕截图,或者更好的是一个电子表格样本会有助于抱歉没有清理任何内容:P我再次编辑,添加的示例文档与我的完全相同,但数据名称不同。谢谢,这使它变得更简单,请查看我的答案非常好的解决方案,因为我用按钮中途改变了方向,我有一个想法,它可以被优化很多。。非常感谢!是否可以让它检查double条目并编辑输出的格式?感谢您花时间来帮助!假定用于检测重复项的脚本不起作用。它甚至不会附加新的数据。另外,当我使用“.copyTo(target,{contentsOnly:true})”时,contentsOnly为我解决了格式问题。。这是实现我需要的更好的解决方案吗?因为这是对客户的出价,所以格式非常重要。对于邮政编码中的0,可能大多数情况都是这样。