[Google Sheets API] 重複した行を削除する

Google Sheets API v4（Java）を使用して、
スプレットシートの重複した行を削除する方法
についてご紹介します。

メニュー：「データ」 ⇨ 「データ クリーンアップ」 ⇨　「重複を削除」
で実行できる内容と同じです。

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Google Sheets API] Google Sheets API v4をJavaで操作する](https://qiita.com/doran/items/3d43f776188b2281044c)
を参照ください。
```
例：requests.add(moveDimension(sheetId)); //実行したいリクエストのMethodを指定
```
:::

:::note info
その他のGoogle Sheets APIは、下記の記事を参照ください。
[⧉[Google Sheets API] JavaでスプレットシートのメニューとAPIを関連づけてみた](https://qiita.com/doran/items/2f6f8932b994fbd1a170)
:::

|No||目次|
|---|---|---|
|1||[重複した行の削除](#1-重複した行の削除)|
||1|[行全体が重複](#11-行全体が重複)|
||2|[指定した列の値が重複](#12-指定した列の値が重複)|

## 1. 重複した行の削除
列の値が同じ行を削除できます。

・行全体が重複している場合
・指定した列の値のみが重複している場合
の削除が指定できます。

### 1.1. 行全体が重複
指定した範囲の行が重複している場合、1行を残して他の重複行を削除します。

**サンプル コード**
シートを指定して重複行を削除します。
セルの範囲を指定して重複行を削除することもできます。
```
public Request deleteDuplicates(Integer sheetId) {
    Request request = new Request();

    GridRange range = new GridRange();
    range.setSheetId(sheetId);       //重複行を削除するシートID
    
    //範囲を指定した場合は、指定範囲のみが対象となります。
//  range.setStartRowIndex(0);       //開始行(0スタート)
//	range.setEndRowIndex(4);         //終了行(0スタート)
//	range.setStartColumnIndex(0);    //開始列(0スタート))
//	range.setEndColumnIndex(4);      //終了列(0スタート)
    
    DeleteDuplicatesRequest r = new DeleteDuplicatesRequest();
    r.setRange(range);
    
    request.setDeleteDuplicates(r);
    return request;
}
```
**実行結果**
画像の選択した箇所が重複しています。
<img width="320" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/ec96b781-50f7-9d53-5f6f-49e704206544.png">
重複した行が1行のみ残して削除されました。
<img width="320" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/67188f00-3c1f-ac05-7598-8e2aef081be4.png">
<br>

***次は範囲を指定して実行してみました***

複数の表があり、それぞれ重複しています。
<img width="320" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/5b9f1e4f-c57a-19a4-bbca-e29136d1e34e.png">

指定した範囲の重複行のみが削除されました。
指定した範囲外の下の表もそのままです。
<img width="320" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/fee27c99-d9d7-dc46-724a-5f03379f15b4.png">

### 1.2. 指定した列の値が重複
指定した列の値が一致した場合に同一行とみなします。

**サンプル コード**
C列、F列の値が同じ行を同一行とみなして削除します。
```
public Request deleteDuplicates(Integer sheetId) {
    Request request = new Request();

    GridRange range = new GridRange();
    range.setSheetId(sheetId);         //重複行を削除するシートID

    //列の指定
    List<DimensionRange> columns = new ArrayList<>();
    DimensionRange column1 = new DimensionRange();
    column1.setSheetId(sheetId);
    column1.setDimension("COLUMNS");  //COLUMNSのみ指定可能
    column1.setStartIndex(2); 		  //開始位置(0スタート)
    column1.setEndIndex(3); 		  //終了位置(1スタート)
    columns.add(column1);
    DimensionRange column2 = new DimensionRange();
    column2.setSheetId(sheetId);
    column2.setDimension("COLUMNS");  //COLUMNSのみ指定可能
    column2.setStartIndex(5); 		  //開始位置(0スタート)
    column2.setEndIndex(6); 		  //終了位置(1スタート)
    columns.add(column2);
    
    DeleteDuplicatesRequest r = new DeleteDuplicatesRequest();
    r.setComparisonColumns(columns);
    r.setRange(range);
    
    request.setDeleteDuplicates(r);
    return request;
}
```
**実行結果**
画像の選択したセル(C列,F列)が重複しています。(3行目はC列のみ一致)
　<img width="320" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/67a261fe-7021-2ee2-0e78-22263036d8a3.png">
 
C列とF列の値が同じ行(4,5行目)のみが削除されました。
　<img width="320" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/3119d5b2-c999-7667-7575-bc283c766c42.png">

<br>
おしまい。。