Google Script для удаления дубликатов сверху вниз - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть сценарий, который объединяет три сценария для выполнения следующих действий:

1) Вставка строк из одной вкладки в верхнюю часть другой вкладки 2) Удаление дубликатов из вкладки, в которую только что были добавлены данные 3) Очистите старую вкладку, из которой только что были перенесены данные из

. Для сценария De-dupe он удаляет строки, начинающиеся снизу, а затем идет вверх.Итак, я установил и удалил существующие данные.Что мне нужно сделать, это начать сверху и спуститьсяТаким образом, если новые записи строк, перенесенные из первого сценария, будут признаны дубликатами, он должен вместо этого удалить их.

Как я могу заставить сценарий de-dupe по сути обрабатывать противоположный путь?

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

Ссылка: Удаление повторяющихся строк в электронной таблице Google из конечной строки

function Run(){
  insert();
  removeDuplicates();
  clear1();
}
function insert() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var source = ss.getSheetByName('Candidate Refresh'); // change here
  var des = ss.getSheetByName('Candidate Listing'); // change here

  var sv = source
    .getDataRange()
    .getValues();
  sv.shift();
  des.insertRowsAfter(1, sv.length);
  des.getRange(2, 1, sv.length, source.getLastColumn()).setValues(sv);
}

//Code in Question Start

function removeDuplicates() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getLastRow();
  var firstColumn = sheet.getRange(1, 2, rows, 1).getValues();
firstColumn = firstColumn.map(function (e) {return e[0]})
  for (var i = rows; i >0; i--) {
    if (firstColumn.indexOf(firstColumn[i-1]) != i-1) {
      sheet.deleteRow(i);
    }
  }
}

//Code in Question End

function clear1() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('Candidate Refresh');
  sheet.getRange('A2:K100').clearContent()

}

Если новые строки вверху листа признаны дубликатами, удалите новые строки вверху.

1 Ответ

1 голос
/ 11 апреля 2019

попробуйте это:

function removeDuplicates() {
  var sheet=SpreadsheetApp.getActiveSheet();
  var rows=sheet.getLastRow();
  var firstColumn=sheet.getRange(1, 2, rows, 1).getValues();
  firstColumn = firstColumn.map(function(e){return e[0]})
  var uA=[];
  for (var i=rows;i>0;i--) {
    if (uA.indexOf(firstColumn[i-1])!=-1) {
      sheet.deleteRow(i);
    }else{
      uA.push(firstColumn[i-1]);
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...