Google表格循环搜索栏,选择拖曳

时间:2017-04-04 07:59:01

标签: google-sheets

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

我为此脚本添加了一个按钮,当我按下按钮时,它会触发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
  }
}

编辑* 示例文档: https://docs.google.com/spreadsheets/d/1DFbAp0IN8_UFv9u8kWiZBTxDogj4e7FnuAPzC0grDw0/edit?usp=sharing

任何帮助都非常感谢!

干杯, Reiel

1 个答案:

答案 0 :(得分:0)

  • 由于您有静态表单,因此要复制的信息的位置不会改变
  • 由于我们知道我们想要复制数据,因此我们不需要对我们所处的位置进行任何验证,因此所有这些内容都可以实现
  • 表单有一个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);
  }  
}

请注意,对于特定示例,存在一些问题,因为前导零被切断。表格有点奇怪,有时甚至在设置单元格时也会尝试强制格式为数字。格式化为文本...