2017-06-02 14 views
0

このコードがうまくいかない理由を100%確信しているわけではありません。セルの色が特定の色である場合、Googleスプレッドシートの行を削除してください

私は前のSO投稿からコードを取得しました。そこから、スクリプトを変更して必要な処理を行いました。

function onOpen() { 
    // get active spreadsheet 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 

    // create menu 
    var menu = [{name: "Evaluate Column J/Call Duration", functionName: "deleteRow"}]; 

    // add to menu 
    ss.addMenu("Delete Calls Under 1 Minute", menu); 
} 

function deleteRow() { 
    // get active spreadsheet 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 

// get active/selected row 
    var activeRow = ss.getActiveRange().getRowIndex(); 

    // get content column J 
    var columnJ = ss.getRange("J"+activeRow).getFontColor(); 

    // evaluate whether cell has white text or not 
    if (columnJ == 'white' || columnJ == '#FFFFFF') { 
    ss.deleteRow(parseInt(activeRow)); 
    } 
} 

基本的に私は、スーパーコールコールトラッキングソフトウェアからエクスポートされたスプレッドシートを持っています。私たちの主な問題は、1分未満のすべての電話と重複する電話を取り除く必要があることです。そこで、両方の条件付き書式を追加しました。これは1分の呼び出しを取り除くためのもので、順番に行全体を削除する必要があります。

誰もがこれについて考えていますか?みんなありがとう。

答えて

1

列jは10です。色は '#ffffff'形式です。赤は '#ff0000'です。この関数は、選択された列で選択された色を持つ行を削除します。

function jakeDeleteRow(column,color) { 
    var column = (typeof(column)!='undefined')?column:10; 
    var color = (typeof(color)!='undefined')?color:'#ff0000; 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sht = ss.getActiveSheet(); 
    var rng = ss.getDataRange(); 
    var rngA = rng.getBackgrounds() 
    for(var i=rngA.length-1;i>-1;i--) 
    { 
    if(rngA[i][column-1]==color) 
    { 
     sht.deleteRow(i+1); 
    } 
    } 
} 
+0

このような行を削除する場合は、最後から開始する方がはるかに優れています。つまり、ある行が削除されると、残りの行の位置がずれることになり、削除された次の行は間違った行になります。 – ScampMichael

+0

@ScampMichaelはい、あなたの正しい。私はちょうど1について考えていた。私たちは前と同じような問題を抱えていた。 – Cooper

+0

@ScampMichaelご協力いただきありがとうございます。 – Cooper

関連する問題