データ検証
Microsoft Excel はワークシートデータの自動フィルタリングや検証に役立つ機能を提供しています。
データ検証 は、ワークシートに入力されたデータに関するルールを設定する機能です。たとえば、DATE という列には日付のみが含まれるようにし、別の列には数字のみが含まれるようにするなど、検証を使用してできることがあります。特定の範囲内の日付のみを含むようにすることもできます。データ検証を使用すると、ワークシート内のセルに入力される内容を制御できます。Aspose.Cells は、Microsoft Excel のデータ検証と自動フィルター機能を完全にサポートしています。この記事では、Microsoft Excel の機能の使用方法と、Aspose.Cells を使用したコードについて説明します。
データ検証の種類と実行
Microsoft Excel はさまざまな種類のデータ検証をサポートしています。それぞれの種類は、セルまたはセル範囲に入力されるデータの種類を制御するために使用されます。以下は、それぞれの種類を確認するためのコードスニペットの例です。
- 整数であること、つまり、小数部がないことを検証します。
- 小数点数が正しい構造に従うことを検証します。コード例で、セル範囲に対して小数部が 2 つあることを定義します。
- 値が特定の値のリストに制限されることを検証します。リスト検証では、セルまたはセル範囲に適用できる別々の値リストを定義します。
- 日付が特定の範囲内にあることを検証します。
- 時間が特定の範囲内にあることを検証します。
- テキストが指定の文字数範囲内にあることを検証します。
Microsoft Excel でデータ検証
Microsoft Excel を使用して検証を作成するには:
-
ワークシートで、検証を適用したいセルを選択します。
-
データ メニューから 検証 を選択します。 検証のダイアログが表示されます。
-
設定 タブをクリックして、以下に示すように設定を入力します。
データ検証の設定
Aspose.Cells を使用したデータ検証
データ検証は、ワークシートに入力された情報を検証するための強力な機能です。データ検証を使用すると、開発者はユーザーに選択肢のリストを提供したり、データの入力を特定のタイプやサイズに制限したりすることができます。 Aspose.Cellsでは、各Worksheetクラスには、Validationsオブジェクトがあり、これはValidationオブジェクトのコレクションを表します。検証を設定するには、いくつかのValidationクラスのプロパティを設定します:
- Type: 検証タイプを表し、ValidationType列挙型の事前定義された値の1つを使用して指定できます。
- Operator: 検証で使用する演算子を表し、OperatorType列挙型の事前定義された値の1つを使用して指定できます。
- Formula1: データ検証の最初の部分に関連付けられた値や式を表します。
- Formula2: データ検証の2番目の部分に関連付けられた値や式を表します。
Validationオブジェクトのプロパティが構成されたら、開発者は作成した検証を使用して検証されるセル範囲に関する情報を保存するためにCellArea構造を使用できます。
データ検証の種類
データ検証を使用すると、各セルにビジネスルールを組み込み、不正確なエントリがエラーメッセージを引き起こすようにすることができます。ビジネスルールとは、ビジネスが運営される方法を規定する方針と手順です。Aspose.Cellsはすべての重要なデータ検証の種類をサポートしています。
ValidationType列挙型には、次のメンバーがあります:
メンバー名 | 説明 |
---|---|
ANY_VALUE | :すべてのタイプの値を示します。 |
WHOLE_NUMBER | :整数の検証タイプを示します。 |
DECIMAL | :10進数の検証タイプを示します。 |
LIST | :ドロップダウンリストの検証タイプを示します。 |
DATE | :日付の検証タイプを示します。 |
TIME | :時間の検証タイプを示します。 |
TEXT_LENGTH | :テキストの長さの検証タイプを示します。 |
CUSTOM | :カスタム検証のタイプを示します。 |
プログラミングサンプル: 整数のデータ検証
このタイプの検証では、ユーザーは検証済みのセルに指定された範囲内の整数のみを入力できます。次に示すコード例は、WHOLE_NUMBER検証タイプを実装する方法を示しています。例では、Microsoft Excelを使用して作成したものと同じデータ検証をAspose.Cellsを使用して作成します。
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getSharedDataDir(WholeNumberDataValidation.class) + "data/"; | |
// Instantiating an Workbook object | |
Workbook workbook = new Workbook(); | |
WorksheetCollection worksheets = workbook.getWorksheets(); | |
// Accessing the Validations collection of the worksheet | |
Worksheet worksheet = worksheets.get(0); | |
// Applying the validation to a range of cells from A1 to B2 using the | |
// CellArea structure | |
CellArea area = new CellArea(); | |
area.StartRow = 0; | |
area.StartColumn = 0; | |
area.EndRow = 1; | |
area.EndColumn = 1; | |
ValidationCollection validations = worksheet.getValidations(); | |
// Creating a Validation object | |
int index = validations.add(area); | |
Validation validation = validations.get(index); | |
// Setting the validation type to whole number | |
validation.setType(ValidationType.WHOLE_NUMBER); | |
// Setting the operator for validation to Between | |
validation.setOperator(OperatorType.BETWEEN); | |
// Setting the minimum value for the validation | |
validation.setFormula1("10"); | |
// Setting the maximum value for the validation | |
validation.setFormula2("1000"); | |
// Saving the Excel file | |
workbook.save(dataDir + "WNDValidation_out.xls"); | |
// Print message | |
System.out.println("Process completed successfully"); |
プログラミングサンプル: 10進数のデータ検証
このタイプの検証では、ユーザーは検証済みのセルに10進数を入力できます。例では、ユーザーは10進数の値のみを入力するように制限され、検証領域はA1:A10です。
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getSharedDataDir(DecimalDataValidation.class) + "data/"; | |
// Create a workbook object. | |
Workbook workbook = new Workbook(); | |
// Create a worksheet and get the first worksheet. | |
Worksheet ExcelWorkSheet = workbook.getWorksheets().get(0); | |
// Specify the validation area of cells. | |
CellArea area = new CellArea(); | |
area.StartRow = 0; | |
area.StartColumn = 0; | |
area.EndRow = 9; | |
area.EndColumn = 0; | |
// Obtain the existing Validations collection. | |
ValidationCollection validations = ExcelWorkSheet.getValidations(); | |
// Create a validation object adding to the collection list. | |
int index = validations.add(area); | |
Validation validation = validations.get(index); | |
// Set the validation type. | |
validation.setType(ValidationType.DECIMAL); | |
// Specify the operator. | |
validation.setOperator(OperatorType.BETWEEN); | |
// Set the lower and upper limits. | |
validation.setFormula1("10"); | |
validation.setFormula2("1000"); | |
// Set the error message. | |
validation.setErrorMessage("Please enter a valid integer or decimal number"); | |
// Save the workbook. | |
workbook.save(dataDir + "DDValidation_out.xls"); | |
// Print message | |
System.out.println("Process completed successfully"); |
プログラミングサンプル: リストのデータ検証
このタイプの検証では、ユーザーはドロップダウンリストから値を入力できます。一連のデータを含む行のリストが提供されます。ユーザーはリストからの値のみを選択できます。検証領域は、最初のワークシートのセル範囲A1:A5です。
ここで重要なのは、Validation.setInCellDropDownプロパティをtrueに設定することです。
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getSharedDataDir(ListDataValidation.class) + "data/"; | |
// Create a workbook object. | |
Workbook workbook = new Workbook(); | |
// Get the first worksheet. | |
Worksheet ExcelWorkSheet = workbook.getWorksheets().get(0); | |
// Add a new worksheet and access it. | |
int sheetIndex = workbook.getWorksheets().add(); | |
Worksheet worksheet2 = workbook.getWorksheets().get(sheetIndex); | |
// Create a range with name in the second worksheet. | |
Range range = worksheet2.getCells().createRange(0, 4, 4, 4); | |
range.setName("MyRange"); | |
// Fill different cells with data in the range. | |
range.get(0, 0).setValue("Blue"); | |
range.get(1, 0).setValue("Red"); | |
range.get(2, 0).setValue("Green"); | |
range.get(3, 0).setValue("Yellow"); | |
// Specify the validation area of cells. | |
CellArea area = new CellArea(); | |
area.StartRow = 0; | |
area.StartColumn = 0; | |
area.EndRow = 4; | |
area.EndColumn = 0; | |
// Obtain the existing Validations collection. | |
ValidationCollection validations = ExcelWorkSheet.getValidations(); | |
// Create a validation object adding to the collection list. | |
int index = validations.add(area); | |
Validation validation = validations.get(index); | |
// Set the validation type. | |
validation.setType(ValidationType.LIST); | |
// Set the in cell drop down. | |
validation.setInCellDropDown(true); | |
// Set the formula1. | |
validation.setFormula1("=MyRange"); | |
// Enable it to show error. | |
validation.setShowError(true); | |
// Set the alert type severity level. | |
validation.setAlertStyle(ValidationAlertType.STOP); | |
// Set the error title. | |
validation.setErrorTitle("Error"); | |
// Set the error message. | |
validation.setErrorMessage("Please select a color from the list"); | |
// Save the excel file. | |
workbook.save(dataDir + "LDValidation_out.xls"); | |
// Print message | |
System.out.println("Process completed successfully"); |
プログラミングサンプル: 日付のデータ検証
このタイプの検証では、ユーザーは検証済みのセルに特定の範囲内の日付値、または特定の条件を満たす日付値を入力できます。例では、ユーザーは1970年から1999年の間の日付を入力することに制限されます。ここでは、検証領域はB1セルです。
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getSharedDataDir(DateDataValidation.class) + "data/"; | |
// Create a workbook. | |
Workbook workbook = new Workbook(); | |
// Obtain the cells of the first worksheet. | |
Cells cells = workbook.getWorksheets().get(0).getCells(); | |
// Put a string value into the A1 cell. | |
cells.get("A1").setValue("Please enter Date b/w 1/1/1970 and 12/31/1999"); | |
// Wrap the text. | |
Style style = cells.get("A1").getStyle(); | |
style.setTextWrapped(true); | |
cells.get("A1").setStyle(style); | |
// Set row height and column width for the cells. | |
cells.setRowHeight(0, 31); | |
cells.setColumnWidth(0, 35); | |
// Set a collection of CellArea which contains the data validation | |
// settings. | |
CellArea area = new CellArea(); | |
area.StartRow = 0; | |
area.StartColumn = 1; | |
area.EndRow = 0; | |
area.EndColumn = 1; | |
// Get the validations collection. | |
ValidationCollection validations = workbook.getWorksheets().get(0).getValidations(); | |
// Add a new validation. | |
int i = validations.add(area); | |
Validation validation = validations.get(i); | |
// Set the data validation type. | |
validation.setType(ValidationType.DATE); | |
// Set the operator for the data validation | |
validation.setOperator(OperatorType.BETWEEN); | |
// Set the value or expression associated with the data validation. | |
validation.setFormula1("1/1/1970"); | |
// The value or expression associated with the second part of the data | |
// validation. | |
validation.setFormula2("12/31/1999"); | |
// Enable the error. | |
validation.setShowError(true); | |
// Set the validation alert style. | |
validation.setAlertStyle(ValidationAlertType.STOP); | |
// Set the title of the data-validation error dialog box | |
validation.setErrorTitle("Date Error"); | |
// Set the data validation error message. | |
validation.setErrorMessage("Enter a Valid Date"); | |
// Set and enable the data validation input message. | |
validation.setInputMessage("Date Validation Type"); | |
validation.setIgnoreBlank(true); | |
validation.setShowInput(true); | |
// Save the excel file. | |
workbook.save(dataDir + "DDValidation_out.xls", FileFormatType.EXCEL_97_TO_2003); | |
// Print message | |
System.out.println("Process completed successfully"); |
プログラミングサンプル: 時間のデータ検証
このタイプの検証では、ユーザーは検証済みのセルに特定の範囲内の時刻、または特定の条件を満たす時刻を入力できます。例では、ユーザーは午前09:00から11:30の間の時間のみを入力するように制限されます。ここでは、検証領域はB1セルです。
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getSharedDataDir(TimeDataValidation.class) + "data/"; | |
// Create a workbook. | |
Workbook workbook = new Workbook(); | |
// Obtain the cells of the first worksheet. | |
Cells cells = workbook.getWorksheets().get(0).getCells(); | |
// Put a string value into A1 cell. | |
cells.get("A1").setValue("Please enter Time b/w 09:00 and 11:30 'o Clock"); | |
// Wrap the text. | |
Style style = cells.get("A1").getStyle(); | |
style.setTextWrapped(true); | |
cells.get("A1").setStyle(style); | |
// Set row height and column width for the cells. | |
cells.setRowHeight(0, 31); | |
cells.setColumnWidth(0, 35); | |
// Set a collection of CellArea which contains the data validation | |
// settings. | |
CellArea area = new CellArea(); | |
area.StartRow = 0; | |
area.StartColumn = 1; | |
area.EndRow = 0; | |
area.EndColumn = 1; | |
// Get the validations collection. | |
ValidationCollection validations = workbook.getWorksheets().get(0).getValidations(); | |
// Add a new validation. | |
int i = validations.add(area); | |
Validation validation = validations.get(i); | |
// Set the data validation type. | |
validation.setType(ValidationType.TIME); | |
// Set the operator for the data validation | |
validation.setOperator(OperatorType.BETWEEN); | |
// Set the value or expression associated with the data validation. | |
validation.setFormula1("09:00"); | |
// The value or expression associated with the second part of the data | |
// validation. | |
validation.setFormula2("11:30"); | |
// Enable the error. | |
validation.setShowError(true); | |
// Set the validation alert style. | |
validation.setAlertStyle(ValidationAlertType.INFORMATION); | |
// Set the title of the data-validation error dialog box. | |
validation.setErrorTitle("Time Error"); | |
// Set the data validation error message. | |
validation.setErrorMessage("Enter a Valid Time"); | |
// Set and enable the data validation input message. | |
validation.setInputMessage("Time Validation Type"); | |
validation.setIgnoreBlank(true); | |
validation.setShowInput(true); | |
// Save the excel file. | |
workbook.save(dataDir + "TDValidation_out.xls", FileFormatType.EXCEL_97_TO_2003); | |
// Print message | |
System.out.println("Process completed successfully"); |
プログラミングサンプル:テキスト長データ検証
このタイプの検証を使用すると、ユーザーは検証されたセルに指定された長さのテキスト値を入力できます。例では、ユーザーは5文字を超えない文字列値を入力することが制限されています。検証エリアはB1セルです。
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getSharedDataDir(TextLengthDataValidation.class) + "data/"; | |
// Create a new workbook. | |
Workbook workbook = new Workbook(); | |
// Obtain the cells of the first worksheet. | |
Cells cells = workbook.getWorksheets().get(0).getCells(); | |
// Put a string value into A1 cell. | |
cells.get("A1").setValue("Please enter a string not more than 5 chars"); | |
// Wrap the text. | |
Style style = cells.get("A1").getStyle(); | |
style.setTextWrapped(true); | |
cells.get("A1").setStyle(style); | |
// Set row height and column width for the cells. | |
cells.setRowHeight(0, 31); | |
cells.setColumnWidth(0, 35); | |
// Set a collection of CellArea which contains the data validation | |
// settings. | |
CellArea area = new CellArea(); | |
area.StartRow = 0; | |
area.StartColumn = 1; | |
area.EndRow = 0; | |
area.EndColumn = 1; | |
// Get the validations collection. | |
ValidationCollection validations = workbook.getWorksheets().get(0).getValidations(); | |
// Add a new validation. | |
int i = validations.add(area); | |
Validation validation = validations.get(i); | |
// Set the data validation type. | |
validation.setType(ValidationType.TEXT_LENGTH); | |
// Set the operator for the data validation. | |
validation.setOperator(OperatorType.LESS_OR_EQUAL); | |
// Set the value or expression associated with the data validation. | |
validation.setFormula1("5"); | |
// Enable the error. | |
validation.setShowError(true); | |
// Set the validation alert style. | |
validation.setAlertStyle(ValidationAlertType.WARNING); | |
// Set the title of the data-validation error dialog box. | |
validation.setErrorTitle("Text Length Error"); | |
// Set the data validation error message. | |
validation.setErrorMessage(" Enter a Valid String"); | |
// Set and enable the data validation input message. | |
validation.setInputMessage("TextLength Validation Type"); | |
validation.setIgnoreBlank(true); | |
validation.setShowInput(true); | |
// Save the excel file. | |
workbook.save(dataDir + "TLDValidation_out.xls", FileFormatType.EXCEL_97_TO_2003); | |
// Print message | |
System.out.println("Process completed successfully"); |
データ検証ルール
データ検証が実装された場合、検証はセルに異なる値を割り当ててチェックできます。Cell.GetValidationValue() を使用して検証結果を取得できます。次の例は、異なる値でこの機能を実証しています。テスト用にサンプルファイルを以下のリンクからダウンロードできます:
SampleDataValidationRules.xlsx
サンプルコード
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// Instantiate the workbook from sample Excel file | |
Workbook workbook = new Workbook(srcDir + "sampleDataValidationRules.xlsx"); | |
// Access the first worksheet | |
Worksheet worksheet = workbook.getWorksheets().get(0); | |
/* | |
* Access Cell C1. Cell C1 has the Decimal Validation applied on it.It can take only the values Between 10 and 20 | |
*/ | |
Cell cell = worksheet.getCells().get("C1"); | |
// Enter 3 inside this cell. Since it is not between 10 and 20, it should fail the validation | |
cell.putValue(3); | |
// Check if number 3 satisfies the Data Validation rule applied on this cell | |
System.out.println("Is 3 a Valid Value for this Cell: " + cell.getValidationValue()); | |
// Enter 15 inside this cell. Since it is between 10 and 20, it should succeed the validation | |
cell.putValue(15); | |
// Check if number 15 satisfies the Data Validation rule applied on this cell | |
System.out.println("Is 15 a Valid Value for this Cell: " + cell.getValidationValue()); | |
// Enter 30 inside this cell. Since it is not between 10 and 20, it should fail the validation again | |
cell.putValue(30); | |
// Check if number 30 satisfies the Data Validation rule applied on this cell | |
System.out.println("Is 30 a Valid Value for this Cell: " + cell.getValidationValue()); | |
// Enter large number 12345678901 inside this cell | |
// Since it is not between 1 and 999999999999, it should pass the validation again | |
Cell cell2 = worksheet.getCells().get("D1"); | |
cell2.putValue(12345678901l); | |
// Check if number 12345678901 satisfies the Data Validation rule applied on this cell | |
System.out.println("Is 12345678901 a Valid Value for this Cell: " + cell2.getValidationValue()); |
セルの検証がドロップダウンかどうかをチェックする
セル内に実装できる検証の多くの種類があることが分かりました。検証がドロップダウンかどうかをチェックしたい場合は、Validation.InCellDropDown プロパティを使用してテストできます。次のサンプルコードは、このプロパティの使用法を実証しています。テスト用のサンプルファイルを以下のリンクからダウンロードできます:
sampleDataValidationRules.xlsx
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
Workbook book = new Workbook(srcDir + "sampleValidation.xlsx"); | |
Worksheet sheet = book.getWorksheets().get("Sheet1"); | |
Cells cells = sheet.getCells(); | |
Cell a2 = cells.get("A2"); | |
Validation va2 = a2.getValidation(); | |
if(va2.getInCellDropDown()) { | |
System.out.println("A2 is a dropdown"); | |
} else { | |
System.out.println("A2 is NOT a dropdown"); | |
} | |
Cell b2 = cells.get("B2"); | |
Validation vb2 = b2.getValidation(); | |
if(vb2.getInCellDropDown()) { | |
System.out.println("B2 is a dropdown"); | |
} else { | |
System.out.println("B2 is NOT a dropdown"); | |
} | |
Cell c2 = cells.get("C2"); | |
Validation vc2 = c2.getValidation(); | |
if(vc2.getInCellDropDown()) { | |
System.out.println("C2 is a dropdown"); | |
} else { | |
System.out.println("C2 is NOT a dropdown"); | |
} |
既存の検証にCellAreaを追加
既存のValidation にCellArea を追加したい場合があります。Validation.AddArea(CellArea cellArea) を使用してCellArea を追加すると、Aspose.Cells は新しいエリアを既存のエリアとチェックします。ファイルに多数の検証がある場合、パフォーマンスに影響します。これを克服するために、API はValidation.AddAreaCellArea cellArea, bool checkIntersection, bool checkEdge) メソッドを提供しています。checkIntersection パラメータは、既存の検証エリアとの交差をチェックするかどうかを示します。これをfalseに設定すると、他のエリアのチェックが無効になります。checkEdge パラメータは、適用されたエリアをチェックするかどうかを示します。新しいエリアが左上のエリアになる場合、内部設定が再構築されます。新しいエリアが左上のエリアでないことが確実な場合は、このパラメータをfalse に設定できます。
Validation.AddAreaCellArea cellArea, bool checkIntersection, bool checkEdge) メソッドを使用して既存のValidation に新しいCellArea を追加する方法を示す次のコードスニペット:
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the directories. | |
String sourceDir = Utils.Get_SourceDirectory(); | |
String outputDir = Utils.Get_OutputDirectory(); | |
Workbook workbook = new Workbook(sourceDir + "ValidationsSample.xlsx"); | |
// Access first worksheet. | |
Worksheet worksheet = workbook.getWorksheets().get(0); | |
// Accessing the Validations collection of the worksheet | |
Validation validation = worksheet.getValidations().get(0); | |
// Create your cell area. | |
CellArea cellArea = CellArea.createCellArea("D5", "E7"); | |
// Adding the cell area to Validation | |
validation.addArea(cellArea, false, false); | |
// Save the output workbook. | |
workbook.save(outputDir + "ValidationsSample_out.xlsx"); |
ソースエクセルファイルと出力エクセルファイルが添付されています。