Excelでデータ検証を適用または解除する方法（Java）

Excelのデータ検証機能は、特定のセルに入力できるデータ、または入力すべきデータを制限することができます。例えば、Excelで商品の顧客満足度の指数を収集する場合、1～10までの任意の数値を入力してもらうことができます。
この記事では、無料の[Free Spire.XLS for Java](https://jp.e-iceblue.com/introduce/free-spire-excel-for-java.html)を使用して、**Excelのセルに各種データ検証（数値検証、文字長検証、日付検証、時刻検証、リスト検証など）を適用する方法**と、指定したセル内のデータ検証を解除する方法について説明します。

- **[Excelのセルにデータ検証を適用する](#excelのセルにデータ検証を適用する)**
- **[Excelのセルからデータ検証を削除する](#excelのセルからデータ検証を削除する)**

### 【依存関係の追加】

> この方法は、無料のFree Spire.XLS for Javaが必要ですので、先にjarファイルをインポートしてください。

#### 1. Maven
Maven を使用している場合、プロジェクトの pom.xml ファイルに以下のコードを追加することで、簡単にアプリケーションに JAR ファイルをインポートすることができます。

```XML
<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.xls.free</artifactId>
        <version>5.1.0</version>
    </dependency>
</dependencies>
```

#### 2. 公式サイトよりJarファイルをダウンロード
まず、[Free Spire.XLS for Java](https://jp.e-iceblue.com/download/free-spire-excel-for-java.html) の公式サイトよりzipファイルをダウンロードします。zipファイルを解凍し、libフォルダの下にあるSpire.Xls.jarファイルを依存関係としてプロジェクトにインポートしてください。

## Excelのセルにデータ検証を適用する

> Spire.XLS for Javaを使用して、セルに様々な種類のデータ検証を追加する手順を説明します。

- **Workbook** クラスのオブジェクトを作成します。
- **Workbook.getWorksheets().get()** メソッドを使用して、最初のワークシートを取得します。
- **Worksheet.getCellRange()** メソッドを使用して特定のセル範囲を取得し、データ検証を追加します。
- **CellRange.getDataValidation().setAllowType()** メソッドを使用して、セルで許可されるデータ型を設定します。データ型はInteger、Time、Date、TextLength、Decimalなどが選択可能です。
- **CellRange.getDataValiation().setCompareOperator()** メソッドを使用して、比較演算子を設定します。比較演算子には、Between、NotBetween、Less、Greater、Equalがあります。
- **CellRange.getDataValidation().setFormula1()** と **CellRange.getDataValidation().setFormula2()** メソッドを使用して、データ検証用の数式を 1 つまたは 2 つ設定します。
- **CellRange.getDataValidation().setInputMessage()** メソッドを使用して入力プロンプトを設定します。
- **Workbook.saveToFile()** メソッドを使用して、ワークブックをExcelファイルに保存します。

**Java**

```Java
import com.spire.xls.*;

public class applyDataValidation {

    public static void main(String[] args) {

        //Workbook クラスのオブジェクトを作成する
        Workbook workbook = new Workbook();

        //最初のワークシートを取得する
        Worksheet sheet = workbook.getWorksheets().get(0);

        //セルにテキストを挿入する
        sheet.getCellRange("B2").setText("数字を入力してください：");
        sheet.getCellRange("B4").setText("日付を入力してください：");
        sheet.getCellRange("B6").setText("テキストを入力してください：");
        sheet.getCellRange("B8").setText("リストから項目を選択してください：");
        sheet.getCellRange("B10").setText("時間を入力してください：");

        //C2に数値検証を追加する
        CellRange rangeNumber = sheet.getCellRange("C2");
        rangeNumber.getDataValidation().setAllowType(CellDataType.Integer);
        rangeNumber.getDataValidation().setCompareOperator(ValidationComparisonOperator.Between);
        rangeNumber.getDataValidation().setFormula1("1");
        rangeNumber.getDataValidation().setFormula2("10");
        rangeNumber.getDataValidation().setInputMessage("1〜10までの数字を入力してください。");
        rangeNumber.getStyle().setKnownColor(ExcelColors.BlueGray);

        //C4に数値検証を追加する
        CellRange rangeDate = sheet.getCellRange("C4");
        rangeDate.getDataValidation().setAllowType(CellDataType.Date);
        rangeDate.getDataValidation().setCompareOperator(ValidationComparisonOperator.Between);
        rangeDate.getDataValidation().setFormula1("2010/1/1");
        rangeDate.getDataValidation().setFormula2("2020/12/31");
        rangeDate.getDataValidation().setInputMessage("2010/1/1～2020/12/31の間で日付を入力してください。");
        rangeDate.getStyle().setKnownColor(ExcelColors.BlueGray);

        //C6に数値検証を追加する
        CellRange rangeTextLength = sheet.getCellRange("C6");
        rangeTextLength.getDataValidation().setAllowType(CellDataType.TextLength);
        rangeTextLength.getDataValidation().setCompareOperator(ValidationComparisonOperator.LessOrEqual);
        rangeTextLength.getDataValidation().setFormula1("5");
        rangeTextLength.getDataValidation().setInputMessage("5文字以内で入力してください。");
        rangeTextLength.getStyle().setKnownColor(ExcelColors.BlueGray);

        //C8に数値検証を追加する
        CellRange rangeList = sheet.getCellRange("C8");
        rangeList.getDataValidation().setValues(new String[] { "米国", "カナダ", "英国", "ドイツ" }) ;
        rangeList.getDataValidation().isSuppressDropDownArrow(false);
        rangeList.getDataValidation().setInputMessage("リストから項目を選択してください。");
        rangeList.getStyle().setKnownColor(ExcelColors.BlueGray);

        //C10に数値検証を追加する
        CellRange rangeTime = sheet.getCellRange("C10");
        rangeTime.getDataValidation().setAllowType(CellDataType.Time);
        rangeTime.getDataValidation().setCompareOperator(ValidationComparisonOperator.Between);
        rangeTime.getDataValidation().setFormula1("9:00");
        rangeTime.getDataValidation().setFormula2("12:00");
        rangeTime.getDataValidation().setInputMessage("9:00〜12:00の間で時間を入力してください。");
        rangeTime.getStyle().setKnownColor(ExcelColors.BlueGray);

        //列2の幅の自動調整を設定する
        sheet.autoFitColumn(2);

        //列3の幅を設定する
        sheet.getColumns()[2].setColumnWidth(20);

        //ファイルに保存する
        workbook.saveToFile("データ検証の適用.xlsx", ExcelVersion.Version2016);
    }
}
```

#### 【結果のExcelファイル】

![Excelのセルにデータ検証を適用する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/1a0cfd11-a160-5634-653c-e2b6f332f36c.png)

## Excelのセルからデータ検証を削除する

> 以下は、Spire.XLS for Javaを使用して、指定したセルのデータ検証を解除する手順です。

- **Workbook** クラスのオブジェクトを作成します。
- **Workbook.loadFromFile()** メソッドを使用して、データ検証を含むExcelファイルを読み込みます。
- **Workbook.getWorksheets().get()** メソッドを使用して、最初のワークシートを取得します。
- 検証を除去するセルを配置する矩形の配列を作成します。
- **Worksheet.getDVTable().remove()** メソッドを使用して、選択したセルからデータ検証を削除します。
- **Workbook.saveToFile()** メソッドを使用して、ワークブックをExcelファイルに保存します。

```Java
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;

import java.awt.*;

public class removeDataValidation {

    public static void main(String[] args) {

        //Workbook クラスのオブジェクトを作成する
        Workbook workbook = new Workbook();

        //Excelファイルを読み込む
        workbook.loadFromFile("データ検証の適用.xlsx");

        //最初のワークシートを取得する
        Worksheet worksheet = workbook.getWorksheets().get(0);

        //ワークシートの範囲を特定するための矩形の配列を作成する
        Rectangle[] rectangles = new Rectangle[]{

                //1つの矩形（columnIndex, rowIndex）は特定のセルを指定し，列または行のインデックスは0から始まる
                //セル範囲を指定するには、Rectangle(startColumnIndex, startRowIndex, endColumnIndex, endRowIndex) を使用する
                new Rectangle(2,1),
                new Rectangle(2,3),
                new Rectangle(2,5),
                new Rectangle(2,7),
                new Rectangle(2,9)
        };

        //選択したセルからデータ検証を削除する
        worksheet.getDVTable().remove(rectangles);

        //ワークブックをExcelファイルに保存する
        workbook.saveToFile("データ検証の削除.xlsx");
    }
}
```

#### 【結果のExcelファイル】

![Excelのセルからデータ検証を削除する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/fb7e1725-3b8c-2441-58ef-1a724a1d3ed8.png)