Таблицы Google - столбец поиска петли, выберите буксировку

У меня есть таблица Google, и у меня есть последняя проблема, которую я не могу решить.

Я добавил кнопку к этому сценарию, и когда я нажимаю кнопку, она запускает функцию 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

Любая помощь очень ценится!

Привет, Рейл


person Latent-code    schedule 04.04.2017    source источник
comment
Какое взаимодействие вы пытаетесь создать? кто-то вводит да в столбец три, и строка копируется на другой лист?   -  person Robin Gertenbach    schedule 04.04.2017
comment
извините, теперь я еще менее ясен, у вас есть одна кнопка, и сценарий должен копировать все с да, или всегда есть да везде, и у вас есть кнопка для каждой строки?   -  person Robin Gertenbach    schedule 04.04.2017
comment
Может быть, поможет снимок экрана или еще лучше образец таблицы   -  person Robin Gertenbach    schedule 04.04.2017
comment
Извините, что ничего не прояснил: P я снова отредактировал, добавил пример документа, который в точности совпадает с моим, но с другими именами данных.   -  person Latent-code    schedule 04.04.2017
comment
Спасибо, это стало намного проще, пожалуйста, посмотрите мой ответ   -  person Robin Gertenbach    schedule 04.04.2017


Ответы (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);
  }  
}

Обратите внимание, что для конкретного примера есть некоторые проблемы, потому что ведущий ноль обрезается. Таблицы немного странные и иногда пытаются заставить формат быть числом, даже когда вы устанавливаете форматы ячеек на Текст ...

person Robin Gertenbach    schedule 04.04.2017
comment
очень хорошее решение, так как я изменил направление с помощью кнопки на полпути, я подумал, что его можно сильно оптимизировать .. Большое спасибо! Можно ли сделать так, чтобы он проверял двойные записи и редактировал формат вывода? - person Latent-code; 04.04.2017
comment
Спасибо, что нашли время помочь с этим! Скрипт, который должен обнаруживать дубликаты, не работает. он даже добавляет новые данные. Кроме того, когда я использовал: '.copyTo (target, {contentsOnly: true})', contentOnly решил для меня форматирование .. Это лучшее решение для достижения того, что мне нужно? Поскольку это предложение для клиентов, форматирование очень важно. возможно, наиболее вероятно для 0 в почтовых индексах. - person Latent-code; 04.04.2017