今回は PhpSpreadsheet で行う「ワークシート」の「セル」の 「データ入力規則設定」 について説明したいと思います。
データ入力規則 は特定のセルに挿入できるデータの入力フィルターを指定できます。 このフィルターは範囲、及びリストあります。 例えば、範囲の場合は『値は「1」から「10」の間でなければなならない』であったり、リストの場合は『指定されたリストから値を選択する』ことです。
■セルに範囲入力設定
セルに入力規則として値の範囲を設定します。
ワークシートオブジェクト の getCell() メソッドで セルオブジェクト を取得し セルオブジェクト の getDataValidation() メソッドで セル入力規則オブジェクト を取得します。
セル入力規則オブジェクト の各種メソッドにより「入力規則タイプ」「入力エラータイプ」「入力メッセージ」「エラーメッセージ」及び「上下限値」の 設定を行います。
以下のソースは「B3」セルに入力範囲「1」~「10」を設定します。
<?php // ライブラリ読込 require '../vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Cell\DataValidation; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; // Spreadsheetオブジェクト生成 $objSpreadsheet = new Spreadsheet(); // ワークシートオブジェクト $objSheet = $objSpreadsheet->getActiveSheet(); // セル[B3]の入力規則オブジェクト取得 $objValidation = $objSheet->getCell('B3')->getDataValidation(); // 入力規則タイプの設定 $objValidation->setType( DataValidation::TYPE_WHOLE); // 入力エラータイプの設定 $objValidation->setErrorStyle( DataValidation::STYLE_STOP); // 空白(ブランク)入力の許可設定 $objValidation->setAllowBlank(true); // 入力メッセージの表示設定 $objValidation->setShowInputMessage(true); // エラーメッセージの表示設定 $objValidation->setShowErrorMessage(true); // エラーメッセージのダイアログのタイトル設定 $objValidation->setErrorTitle('入力エラー'); // エラーメッセージ設定 $objValidation->setError('入力データが間違っています。'); // プロンプトのタイトル設定 $objValidation->setPromptTitle('データ入力について'); // プロンプトのエラーメッセージ設定 $objValidation->setPrompt('値範囲は[1]から[10]です'); // 下限値設定「1」 $objValidation->setFormula1(1); // 上限値設定「10」 $objValidation->setFormula2(10); // [test8-1.xlsx]:Excel2007形式で保存する $objWriter = new Xlsx($objSpreadsheet); $objWriter->save('test8-1.xlsx'); exit(); ?>
出力されたエクセルファイルを見てみると以下の様になります。
左図はエクセルでファイルを開いて「B3」セルをアクティブにした様子です。 右図は「B3」セルに「0」を入力して、エラーメッセージが表示された様子です。
PhpOffice\PhpSpreadsheet\Cell\DataValidation には以下の様に定数が宣言されています。
// Data validation types const TYPE_NONE = 'none'; const TYPE_CUSTOM = 'custom'; const TYPE_DATE = 'date'; const TYPE_DECIMAL = 'decimal'; const TYPE_LIST = 'list'; const TYPE_TEXTLENGTH = 'textLength'; const TYPE_TIME = 'time'; const TYPE_WHOLE = 'whole'; // Data validation error styles const STYLE_STOP = 'stop'; const STYLE_WARNING = 'warning'; const STYLE_INFORMATION = 'information';
■セルにリスト入力設定
セルにリスト入力をする場合、上の例の様と異なる点は「入力規則タイプ」を TYPE_LIST にし セル入力規則オブジェクト の setFormula1 メソッドで リストの内容をカンマ区切りの文字列で与えます。
尚 setShowDropDown メソッドでドロップダウンの表示設定を必ず True で設定します。
以下のソースは「B3」セルにリスト「AAA」「BBB」「CCC」を設定します。
<?php // ライブラリ読込 require '../vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Cell\DataValidation; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; // Spreadsheetオブジェクト生成 $objSpreadsheet = new Spreadsheet(); // ワークシートオブジェクト $objSheet = $objSpreadsheet->getActiveSheet(); // セル[B3]の入力規則オブジェクト取得 $objValidation = $objSheet->getCell('B3')->getDataValidation(); // 入力規則タイプの設定 $objValidation->setType(DataValidation::TYPE_LIST); // 入力エラータイプの設定 $objValidation->setErrorStyle(DataValidation::STYLE_INFORMATION); // 空白(ブランク)入力の不可設定 $objValidation->setAllowBlank(false); // 入力メッセージの表示設定 $objValidation->setShowInputMessage(true); // エラーメッセージの表示設定 $objValidation->setShowErrorMessage(true); // ドロップダウンの表示設定 $objValidation->setShowDropDown(true); // エラーメッセージのダイアログのタイトル設定 $objValidation->setErrorTitle('入力エラー'); // エラーメッセージ設定 $objValidation->setError('入力データがリストにありません。'); // プロンプトのタイトル設定 $objValidation->setPromptTitle('データ入力について'); // プロンプトのエラーメッセージ設定 $objValidation->setPrompt('ドロップダウンリストから選択して下さい。'); // ドロップダウンリスト設定 $objValidation->setFormula1('"AAA,BBB,CCC"'); // [test8-2.xlsx]:Excel2007形式で保存する $objWriter = new Xlsx($objSpreadsheet); $objWriter->save('test8-2.xlsx'); exit(); ?>
出力されたエクセルファイルを見てみると以下の様になります。
左図はエクセルでファイルを開いて「B3」セルをクリックしてアクティブにし、右側のドロップボタンをクリックした様子です。 右図は「B3」セルに「"ddd"」を入力して、エラーメッセージが表示された様子です。
この setFormula1 メソッドで直接リストの一覧を設定する方法ですが、文字列の長さの制限が「255」ですので、注意が必要です。
そこでリストのデータを別のセルに持たせて、それを指定する方法がありますので、以下の項目を見て下さい。
■セルにリスト入力設定(他のセルにリストデータを持つ)
セル入力規則オブジェクト の setFormula1 メソッドでリストの存在するセル位置を指定します。
<?php // ライブラリ読込 require '../vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Cell\DataValidation; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; // Spreadsheetオブジェクト生成 $objSpreadsheet = new Spreadsheet(); // ワークシートオブジェクト $objSheet = $objSpreadsheet->getActiveSheet(); // リストデータの設定(E2:E7) $objSheet->setCellValue('E2', "日本"); $objSheet->setCellValue('E3', "中国"); $objSheet->setCellValue('E4', "韓国"); $objSheet->setCellValue('E5', "タイ"); $objSheet->setCellValue('E6', "ベトナム"); $objSheet->setCellValue('E7', "フィリピン"); // セル[B3]の入力規則オブジェクト取得 $objValidation = $objSheet->getCell('B2')->getDataValidation(); // 入力規則タイプの設定 $objValidation->setType(DataValidation::TYPE_LIST); // 入力エラータイプの設定 $objValidation->setErrorStyle(DataValidation::STYLE_INFORMATION); // 空白(ブランク)入力の不可設定 $objValidation->setAllowBlank(false); // 入力メッセージの表示設定 $objValidation->setShowInputMessage(true); // エラーメッセージの表示設定 $objValidation->setShowErrorMessage(true); // ドロップダウンの表示設定 $objValidation->setShowDropDown(true); // エラーメッセージのダイアログのタイトル設定 $objValidation->setErrorTitle('入力エラー'); // エラーメッセージ設定 $objValidation->setError('入力データがリストにありません。'); // プロンプトのタイトル設定 $objValidation->setPromptTitle('データ入力について'); // プロンプトのエラーメッセージ設定 $objValidation->setPrompt('ドロップダウンリストから選択して下さい。'); // ドロップダウンリスト設定 $objValidation->setFormula1('$E$2:$E$7'); // セル範囲の指定 // [test8-3.xlsx]:Excel2007形式で保存する $objWriter = new Xlsx($objSpreadsheet); $objWriter->save('test8-3.xlsx'); exit(); ?>
出力されたエクセルファイルを見てみると以下の様になります。
左図はエクセルでファイルを開いて「B2」セルをクリックしてアクティブにし、右側のドロップボタンをクリックした様子です。 (「D2」から「D7」に設定した国の一覧がドロップダウンリストに表示されます)
コメント