忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

PHP PHPExcel エクセルのワークシートのセルのデータ入力規則設定について


今回は PHPExcel で行う「ワークシート」の「セル」の 「データ入力規則設定」 について説明したいと思います。

データ入力規則 は特定のセルに挿入できるデータの入力フィルターを指定できます。 このフィルターは範囲、及びリストあります。 例えば、範囲の場合は『値は「1」から「10」の間でなければなならない』であったり、リストの場合は『指定されたリストから値を選択する』ことです。




■セルに範囲入力設定

セルに入力規則として値の範囲を設定します。
ワークシートオブジェクトgetCell() メソッドで セルオブジェクト を取得し セルオブジェクトgetDataValidation() メソッドで セル入力規則オブジェクト を取得します。

セル入力規則オブジェクト の各種メソッドにより「入力規則タイプ」「入力エラータイプ」「入力メッセージ」「エラーメッセージ」及び「上下限値」の 設定を行います。

以下のソースは「B3」セルに入力範囲「1」~「10」を設定します。

<?php
// ライブラリ読込
require_once './PHPExcel-1.8/Classes/PHPExcel.php';
// PHPExcelオブジェクト作成
$objBook = new PHPExcel();
// ワークシートオブジェクト
$objSheet = $objBook->getActiveSheet();

// セル[B3]の入力規則オブジェクト取得
$objValidation = $objSheet->getCell('B3')->getDataValidation();
// 入力規則タイプの設定
$objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_WHOLE);
// 入力エラータイプの設定
$objValidation->setErrorStyle( PHPExcel_Cell_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 = PHPExcel_IOFactory::createWriter($objBook, "Excel2007");
$objWriter->save('test8-1.xlsx');
exit();
?>

出力されたエクセルファイルを見てみると以下の様になります。
左図はエクセルでファイルを開いて「B3」セルをアクティブにした様子です。 右図は「B3」セルに「0」を入力して、エラーメッセージが表示された様子です。



PHPExcel_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_once './PHPExcel-1.8/Classes/PHPExcel.php';
// PHPExcelオブジェクト作成
$objBook = new PHPExcel();
// ワークシートオブジェクト
$objSheet = $objBook->getActiveSheet();

// セル[B3]の入力規則オブジェクト取得
$objValidation = $objSheet->getCell('B3')->getDataValidation();
// 入力規則タイプの設定
$objValidation->setType(PHPExcel_Cell_DataValidation::TYPE_LIST);
// 入力エラータイプの設定
$objValidation->setErrorStyle(PHPExcel_Cell_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 = PHPExcel_IOFactory::createWriter($objBook, "Excel2007");
$objWriter->save('test8-2.xlsx');
exit();
?>

出力されたエクセルファイルを見てみると以下の様になります。
左図はエクセルでファイルを開いて「B3」セルをクリックしてアクティブにし、右側のドロップボタンをクリックした様子です。 右図は「B3」セルに「"ddd"」を入力して、エラーメッセージが表示された様子です。

この setFormula1 メソッドで直接リストの一覧を設定する方法ですが、文字列の長さの制限が「255」ですので、注意が必要です。
そこでリストのデータを別のセルに持たせて、それを指定する方法がありますので、以下の項目を見て下さい。


■セルにリスト入力設定(他のセルにリストデータを持つ)

セル入力規則オブジェクトsetFormula1 メソッドでリストの存在するセル位置を指定します。

<?php
// ライブラリ読込
require_once './PHPExcel-1.8/Classes/PHPExcel.php';
// PHPExcelオブジェクト作成
$objBook = new PHPExcel();
// ワークシートオブジェクト
$objSheet = $objBook->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(PHPExcel_Cell_DataValidation::TYPE_LIST);
// 入力エラータイプの設定
$objValidation->setErrorStyle(PHPExcel_Cell_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 = PHPExcel_IOFactory::createWriter($objBook, "Excel2007");
$objWriter->save('test8-3.xlsx');
exit();
?>

出力されたエクセルファイルを見てみると以下の様になります。
左図はエクセルでファイルを開いて「B2」セルをクリックしてアクティブにし、右側のドロップボタンをクリックした様子です。 (「D2」から「D7」に設定した国の一覧がドロップダウンリストに表示されます)













PR

コメント

コメントを書く