0

シート 1

Timestamp           |Name | Shift.....| Date....| Letter..|    
19/05/2016 15:44:46|Mark | Swap      |  02/AUG | S       |    
Timestamp2           |Ivon | Give away | 25/ AUG | G       |    
Timestamp3           |Laura| Take      | 01/AUG  | A       |     
Timestamp4           |Ann  | Take      | 02/AUG  | A       |    
Timestamp5           |Ann  | Give away | 03/AUG  | G       |
Timestamp6           |Laura| Delete    | 01/AUG  | D       | 

これは Google シートであるため、以下のスクリプトを実行して、名前と日付の列に一致する行を削除しようとしています。EG Laura は、同じ日付の 01AUG に 2 つのエントリを持っています。したがって、両方の行を削除したいと思います。次のスクリプトを試していますが、うまくいきません。

    function removeDuplicates() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Form responses 2");
 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[0] == newData[j][1] && row[1] == newData[j][3]){
  duplicate = true;
      }
    }
    if(!duplicate){
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
 }
4

1 に答える 1

0

v4. 最終(だと思う)。

Cx が "delete" または "Delete" の場合、行 x と、B と D が行 x と同じ行を削除します。

function objTst(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Form responses 2");

  var megarng = sheet.getRange(2, 2, sheet.getLastRow(),sheet.getLastColumn()).getValues(); //[][]

  var rodel = [0]; //rows to delete

  for (i = 0; i<megarng.length; i++){
    if (String(megarng[i][1])==("Delete"||"delete")){ //megarng[][x] 0=b, 1=c, 2=d
      rodel.push(i+2) 

      for (g=0; g<megarng.length ; g++){

        if(String(megarng[g][0])===String(megarng[i][0]) && String(megarng[g][2])===String(megarng[i][2])){

          rodel.push(g+2);

          Logger.log(megarng[g][0]);
          Logger.log(megarng[i][0]);
          Logger.log(megarng[g][2]);
          Logger.log(megarng[i][2]);

          Logger.log(i+"i");
          Logger.log(g);
        }
      }
    }
    rodel.sort(function comp(a,b){return a-b});
    Logger.log(rodel);
  }
  for (i=rodel.length-1 ; 0<i; i--){if (rodel[i-1]!==rodel[i]){sheet.deleteRow(rodel[i]);}}
}
于 2016-06-04T06:04:50.597 に答える