Сценарий для строк Dedupe: неожиданное поведение - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть скрипт, который отправляет данные с одного листа на другой, а затем восстанавливает данные.Сценарий дедупликации, по-видимому, только дедуплицирует НЕКОТОРЫЕ данные.Например, строки 2-13 остаются дубликатами, в то время как строки после строки 35 дедуплицируются.Строки вверху публикуются из скрипта вставки.

Как мне получить скрипт:

a) Дедупилировать весь диапазон данных.
b) Удалить новые дублирующиеся строкиотправлено из сценария вставки, а не строк, которые уже были там.

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

function Run(){
  insert();
  dedupe();
}
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);
}
function dedupe() {
var sheet = SpreadsheetApp.getActive().getSheetByName('Candidate Listing');
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.join() == newData[j].join()){
    duplicate = true;
  }
}
if(!duplicate){
  newData.push(row);
}
}
sheet.clearContents();
sheet.getRange(1, 1, newData.length, 
newData[0].length).setValues(newData);
}

Я ожидал, что будут опубликованы новые данные, будет проверен весь спектр данных на наличие дубликатов, а новые данные будут опубликованы сценарием.подлежит удалению в случае обнаружения дубликата.

1 Ответ

0 голосов
/ 10 апреля 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]})
 for (var i = rows; i >0; i--) {
   if (firstColumn.indexOf(firstColumn[i-1]) != i-1) {
    sheet.deleteRow(i);
        }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...