【问题标题】:Google sheets- loop search column, select tow谷歌表-循环搜索栏,选择拖
【发布时间】:2017-04-04 23:29:35
【问题描述】:

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

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

如何使下面的脚本循环遍历第 3 列中的所有行以搜索“是”值,当找到它时,将其下方的行复制到工作表“客户端”然后停止?

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

非常感谢任何帮助!

干杯, 雷尔

【问题讨论】:

  • 您要设计的交互是什么?有人在第三列输入“是”,然后该行被复制到另一张纸上?
  • 对不起,现在我更不清楚了,你有一个按钮,脚本应该用“是”复制所有内容,还是到处都有“是”,每一行都有一个按钮?
  • 也许截图或者更好的示例电子表格会有所帮助
  • 抱歉没有清理任何东西:P 我再次编辑,添加了与我的完全相同但数据名称不同的示例文档。
  • 谢谢,这让事情变得简单多了,请看我的回答

标签: google-sheets


【解决方案1】:
  • 由于您有一个静态表单,因此要复制的信息的位置不会改变
  • 既然我们知道我们想要复制数据,我们不需要对我们所在的位置进行任何验证,因此所有这些东西都可以去
  • 工作表有一个 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);
  }  
}

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

【讨论】:

  • 非常好的解决方案,因为我用按钮一半改变了方向,我有一个想法,它可以优化很多.. 非常感谢!是否可以让它检查双重条目并编辑输出格式?
  • 感谢您抽出宝贵时间提供帮助!假设检测重复的脚本不起作用。它甚至不会附加新的数据。另外,当我使用:'.copyTo(target,{contentsOnly:true})'时,contentsOnly 为我解决了格式问题。这是实现我需要的更好的解决方案吗?由于这是对客户的出价,因此格式非常重要。也许最适合邮政编码中的 0。
猜你喜欢
  • 2013-03-09
  • 1970-01-01
  • 2014-08-28
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 2023-03-16
  • 1970-01-01
相关资源
最近更新 更多