0

Googleスプレッドシートに次のような顧客データがあります。新しいエントリは定期的に追加され、スクリプトを使用して連絡先番号の列を検索して、新しいエントリの連絡先番号が既に存在するかどうかを確認したいと考えています。 また、可能であれば、スクリプトに既存のエントリの行番号を示す何らかの通知を与えたいと思います。たとえば、通知は「行番号」または「エントリが見つかりません」と書かれた新しい列になります。利用可能なスプレッドシートの列で重複したエントリを検索する

データ:

Contact Number Email ID   Venue Address  Service Date 
1234567890  [email protected] cypress   21/04/2016 
[email protected] river run drive 22/04/2016 

私が探しています何が:

Contact Number Email ID   Venue Address  Service Date Duplicate entry in 
1234567890  [email protected] cypress   21/04/2016  row1 
[email protected] river run drive 22/04/2016  no entries found 
+0

を実行するスクリプトは、Googleアカウントにログインする必要があります。または、入力の前に既に存在するかどうかを調べることができます。どちらですか? –

答えて

1

だから、あなたの説明は、あなたがそれを入力します前のエントリを検索することを意味します。重複を検索するのではなく、すでにデータが重複していることを意味します。私はあなたのために両方のための方法を構築しました。

これは、両方の例を示しています。これは、重複を見つけるか、電話番号でエントリを見つけることになります。残りのロジックとカスタマイズはあなた次第です。ここで

このための例のシートである:Example Spreadsheet

編集:追加された列見出しロジック、そしてあなたがシートに重複を確認するために押すことができるボタンを追加しました。 NOTE:あなたはエントリがすでにシートに存在する意味され、重複したエントリを検索することができますいずれか

//Entry Point 
function myFunction() { 
    var sheet = SpreadsheetApp.getActiveSheet(); //Get the current sheet 
    var dataRange = sheet.getDataRange(); 
    var valuesRange = dataRange.getValues(); //The array of data on the sheet 
    var columns = GetColumns(valuesRange, dataRange.getNumColumns(), 0); 

    var duplicates = SearchForDuplicates(valuesRange, columns.columns['Contact Number'].index); //Search for existing duplicates 
    var elementIndex = SearchForValue(valuesRange, columns.columns['Contact Number'].index, 123456789); //Search for a phone number of 123456789 

    if(duplicates.length > 0){ //If there are duplicates 
    var isDuplicateColumn = columns.columns['Is Duplicate'].index; 
    for(var i = 0; i < duplicates.length; i++){ 
     valuesRange[duplicates[i].index][isDuplicateColumn] = 'Yes'; //Assign Yes to the appropriate row 
    } 
    dataRange.setValues(valuesRange); //Set the spreadsheets values to that of the modified valuesRange 
    } 
    Logger.log(duplicates); 
    Logger.log(elementIndex); 
} 

//Searches an array for duplicate entries 
function SearchForDuplicates(array, columnIndex){ 
    var uniqueElements = {}; 
    var duplicates = []; 
    for(var i = 0; i < array.length; i++){ 
    if(typeof uniqueElements[array[i][columnIndex]] === 'undefined'){ 
     uniqueElements[array[i][columnIndex]] = 0; //If the element does not yet exist in this object, add it 
    } else { 
     duplicates.push({row: array[i], index: i}); //If the element does exist, it's a duplicate 
    } 
    } 
    return duplicates; 
} 

//Searches an array for a value 
function SearchForValue(array, columnIndex, value){ 
    for(var i = 0; i < array.length; i++){ 
    if(array[i][columnIndex] == value){ 
     return i; //Element found, return index 
    } 
    } 
    return -1; //No element found, return -1 
} 

//Gets a columns object for the sheet for easy indexing 
function GetColumns(valuesRange, columnCount, rowIndex) 
{ 
    var columns = { 
    columns: {}, 
    length: 0 
    } 

    Logger.log("Populating columns..."); 
    for(var i = 0; i < columnCount; i++) 
    { 
    if(valuesRange[0][i] !== ''){ 
     columns.columns[valuesRange[0][i]] = {index: i ,value: valuesRange[0][i]}; 
     columns.length++;  
    } 
    } 
    return columns; 
} 
関連する問題