Листы Служб Google пропускают заявление if - PullRequest
0 голосов
/ 07 июня 2018

Я работаю над сценарием для моей компании, чтобы он мог удалять дубликаты записей.Я разбил его из набора источников, потому что я довольно новичок в этом.Этот код предполагается для создания массива всех не повторяющихся записей, очистки всего листа, а затем вставки в массив без дубликатов.В его нынешнем виде он просто заменяет все на листе первой ячейкой.

Я обнаружил, что этот:

    if(!duplicate){
      newData.push(row);
    }

бит кода вообще не активируется.

Вот мой код в целом:

function removeDuplicates(Email, data) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var newData = new Array();
  for(i in data){
    var row = data[i];
    var duplicate = false;
    for(j in newData){
      if(row[Email] == newData[j][1]){
        duplicate = true;
      }
    }
    if(!duplicate){
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length)
      .setValues(newData);
}

Image of before and after running the script so far

Лист теперь выглядит как часть «ДО» до и после запуска сценария.

Опять же, я новичок в этом, поэтому любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 08 июня 2018

Вот рабочий скрипт:

FIELDS = {
  FIRST: 0,
  LAST: 1,
  EMAIL: 2,
  EXTRA_STUFF: 3,
};

function removeDuplicates() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Data');
  var data = sheet.getDataRange().getValues();
  var newData = [];
  for (var i = 0; i < data.length; i++) {
    var duplicate = false;
    for (var j = 0; j < newData.length; j++) {
      if (data[i][FIELDS.EMAIL] == newData[j][FIELDS.EMAIL]) {
        duplicate = true;
        break;
      }
    }
    if (!duplicate) {
      newData.push(data[i]);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length)
      .setValues(newData);
}

Использование ваших данных, вот результат:

+-------+-------------+----------------------+-------------+
| First |    Last     |        Email         | Extra Stuff |
+-------+-------------+----------------------+-------------+
| Joe   | Hays        | jhays@---.com        | abc123      |
| Joe   | Whitten     | jwhitten@---.com     | abc123      |
| Caleb | Christopher | cchristopher@---.com | abc123      |
| Matt  | Davis       | mdavis@---.com       | abc123      |
+-------+-------------+----------------------+-------------+

Некоторые примечания относительно того, на что обращать внимание:

  • FIELDS = {
    • Мне нравится использовать объект для документирования столбцов как констант
    • это облегчает чтение кода, который ссылается на определенные столбцы, с первого взгляда
    • thisэто то, что может быть автоматизировано путем реализации функции, которая создает эквивалентный объект путем анализа первой строки листа
  • function removeDuplicates() {
    • нет необходимости передавать аргументыв эту функцию поймем с первого взгляда
  • for (var i = 0; i < data.length; i++) {
    • Циклический просмотр массивов с помощью переменной, отслеживающей индекс
  • for (var j = 0; j < newData.length; j++) {
    • внутренний цикл должен искать в массиве newData, чтобы сканировать его на наличие дубликатов
  • это может быть хорошей идеей записать в другой отдельный лист,таким образом, если вы столкнетесь с неожиданной проблемой, у вас есть оригиналВсе данные легко в вашем распоряжении
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...