[2020/07/03] PHP PhpSpreadsheet のインストールについて(XAMPPでのPhpSpreadsheetのインストールその1:composer) (No.203)
[2020/07/01] PHP PHPExcel CSVファイルの読み込み・書き込みについて (No.202)
[2020/06/30] PHP PHPExcel エクセルのワークシートの「列(カラム)・行」の「幅、表示・非表示、グループ化/アウトライン化」設定について (No.201)
[2020/06/30] PHP PHPExcel エクセルのワークシートのセルのデータ入力規則設定について (No.200)
[2020/06/25] PHP クラスの中の「return $this」について (No.199)
-
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
-
今回は PHPExcel の後継ライブラリである PhpSpreadsheet のインストールについて説明したいと思います。
PHPExcel のインストールの時はダウンロードしたZIPファイルを解凍して、任意のディレクトリに格納すればそれでよかったのですが、 PhpSpreadsheet では少し面倒なのですが Composer なるパッケージ管理ソフトを使います。
この Composer ですが XAMPP には存在しませんのでインストールする必要があります。
今回の記事は、先ずは Composer のインストールの手順について記します。
■Composer のダウンロード
Composer のダウンロードは以下のサイトから行えます。
composerのサイト(Windows)
⇒https://getcomposer.org/doc/00-intro.mdこのサイトの青くなっている Composer-Setup.exe リンクをクリックすると、 ダウンロードの開始を聞いてきますので「ファイルを保存」 をクリックしてダウンロードして下さい。
UNIXの場合は以下の記事が参考になると思います。
⇒PhpSpreadsheetのTIPSあれこれ
■Composer-Setup.exe の実行開始
ダウンロードした Composer-Setup.exe の実行開始すると以下の表示なります。
チェックオプションを入れることを推奨しているみたいなので、取り敢えずチェックをしました。
その後「Next >」ボタンをクリックしてインストールを開始します。
■インストール先のフォルダ指定
Composer をインストールするフォルダを指定します。
デフォルトで「c:\composer」と表示されますので、このままの設定で「Next >」ボタンをクリックします。■PHP のパス指定
PHP の実行プログラムのパスを指定をします。
XAMPP でのインストールのため、デフォルトで「c:\xampp\php\php.exe」と表示されますので、このままの設定で「Next >」ボタンをクリックします。
そうしますと、以下の様にチェック処理が走ります。■プロキシ設定
プロキシが必要であればここで設定を行います。
特に必要が無いので、このままの設定で「Next >」ボタンをクリックします。■インストールの実行前確認
インストールの実行する前の確認を行います。これで良ければ「Install」ボタンをクリックします。
■Composer のダウンロード処理中
Composer のダウンロードが開始されインストール中の表示です。
■インストール時の警告
私のPCのPHPのバージョンは「5.6.28」なので、バージョンアップしなさいとの警告が出てきました。
「OneDrive」は使用していないので特に問題無いと思いますので「Next >」ボタンをクリックします。The Windows OneDrive folder is not supported on PHP version below 7.2.23 and 7.3.10. Upgrade your PHP(5.6.28) to use this location with Composer.
■インストール完了
インストールが完了すると以下の表示が行われますので「Finish」ボタンをクリックします。
■Composer の確認
コマンドプロンプトを開いて「composer」を実行すると以下の様な表示がされるはずです。 これで Composer のインストールは終了しました。
PR -
今回は PHPExcel でCSVファイルの「読み込み」及び「書き込み」について説明したいと思います。
CSVファイルはカンマで区切られたテキストファイルで、他のシステムからのデータの取り込みや、ユーザに対してのデータの提供などでよく使われます。
「読み込み」及び「書き込み」に対応したクラス「PHPExcel_Reader_CSV」「PHPExcel_Writer_CSV」がありますので、これらを使って処理を行います。■CSVファイルの「読み込み」(読込後、新規にエクセル書込み)
CSVファイルの「読み込み」を行うには PHPExcel_Reader_CSV クラスを使います。
PHPExcel_Reader_CSV クラスを生成し setInputEncoding メソッドで 文字コード を設定します。
更に setDelimiter メソッドで 区切り記号 を設定し setEnclosure メソッドで 囲み文字 を設定します。
最後に load メソッドで CSVファイルを読み込み PHPExcelオブジェクト を生成します。
この PHPExcelオブジェクト を出力することでエクセルファイルに出力できます。<?php // ライブラリ読込 require_once './PHPExcel-1.8/Classes/PHPExcel.php'; // CSV読込クラス生成 $objReader = new PHPExcel_Reader_CSV(); // CSVファイルの文字コード:Shift-JIS $objReader->setInputEncoding('SJIS'); // 区切り記号(カンマ) $objReader->setDelimiter(','); // 文字列の囲み文字(") $objReader->setEnclosure('"'); // シートの位置 $objReader->setSheetIndex(0); // 読込の結果としてPHPExcelオブジェクトが返る $objPHPExcel = $objReader->load("test10.csv"); // [test10-1.xlsx]:Excel2007形式で保存する $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007"); $objWriter->save('test10-1.xlsx'); exit(); ?>
出力されたエクセルファイルを見てみると以下の様になります。
「test10.csv」の内容は以下の通りです。"AAAAAAA","BBB","CCC" "aaaa","bbb","ccc" "ああああ","いいい","漢字データ"
■CSVファイルの「読み込み」(読込後、既存エクセルに追加し書込み)
既に存在するエクセルファイルを読込んでおき、CSVファイルの「読み込み」を行ったシートデータをエクセルデータに追加する方法を説明します。
手順としては、最初に PHPExcel_IOFactory::load() メソッドで既存エクセルファイルを読込みます。
その後は、上記の例の様に PHPExcel_Reader_CSV クラスを生成し、CSVのオプションを設定し loadIntoExisting() メソッドでPHPExcelオブジェクトに追加します。
ここで注意するのは setSheetIndex() メソッドで、シートの位置が任意に指定できることです。
今回は「2」としますので、結果のエクセルファイルには3番目のシートとして生成されます。
また、PHPExcelオブジェクトに追加する時に2番目のシートは存在しないので、空のシートが生成されます。
後はPHPExcelオブジェクトを別名のエクセルファイルで書き込みます。
<?php // ライブラリ読込 require_once './PHPExcel-1.8/Classes/PHPExcel.php'; // [test10-1.xlsx] ファイルをロードしPHPExcelオブジェクト作成 $objPHPExcel = PHPExcel_IOFactory::load('./test10-1.xlsx'); // CSV読込クラス生成 $objReader = new PHPExcel_Reader_CSV(); // CSVファイルの文字コード:Shift-JIS $objReader->setInputEncoding('SJIS'); // 区切り記号(カンマ) $objReader->setDelimiter(','); // 文字列の囲み文字(") $objReader->setEnclosure('"'); // シートの位置 $objReader->setSheetIndex(2); // 読込の結果をPHPExcelオブジェクトに追加する $objReader->loadIntoExisting("test10.csv", $objPHPExcel); // [test10-2.xlsx]:Excel2007形式で保存する $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007"); $objWriter->save('test10-2.xlsx'); exit(); ?>
出力されたエクセルファイルを見てみると以下の様になります。
「Worksheet 2」「Worksheet 3」のシートが追加されています。 「Worksheet 2」は全てが空白のシートで、「Worksheet 3」は今回追加したシートです。
尚、シートの位置指定で以下の様に既存のシートの場所にすると、その場所に上書きされる様です。<?php // ライブラリ読込 require_once './PHPExcel-1.8/Classes/PHPExcel.php'; // [test10-1.xlsx] ファイルをロードしPHPExcelオブジェクト作成 $objPHPExcel = PHPExcel_IOFactory::load('./test10-1.xlsx'); // CSV読込クラス生成 $objReader = new PHPExcel_Reader_CSV(); // CSVファイルの文字コード:Shift-JIS $objReader->setInputEncoding('SJIS'); // 区切り記号(カンマ) $objReader->setDelimiter(','); // 文字列の囲み文字(") $objReader->setEnclosure('"'); // シートの位置 $objReader->setSheetIndex(0); // 読込の結果をPHPExcelオブジェクトに追加する $objReader->loadIntoExisting("test10-1.csv", $objPHPExcel); // [test10-2-1.xlsx]:Excel2007形式で保存する $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007"); $objWriter->save('test10-2-1.xlsx'); exit(); ?>
「test10-1.csv」の内容
"a11","b22" "いいい","漢字データ"
出力されたエクセルファイルを見てみると以下の様になります。
■CSVファイルの「書き込み」
CSVファイルの「書き込み」を行うには PHPExcel_Writer_CSV クラスを使います。
PHPExcelオブジェクト を引数にして PHPExcel_Writer_CSV クラスを生成します。
setDelimiter メソッドで 区切り記号 を setEnclosure メソッドで 囲み文字 を setLineEnding メソッドで 改行コード を設定します。
また setUseBOM メソッドで「UTF-8」ファイルとしての「BOM」ファイルヘッダを出力する指定をします。
さらに setSheetIndex メソッドで出力するシート位置を指定します。
最後に save メソッドで CSVファイルを書込みます。
<?php // ライブラリ読込 require_once './PHPExcel-1.8/Classes/PHPExcel.php'; // [test10-1.xlsx] ファイルをロードしPHPExcelオブジェクト作成 $objPHPExcel = PHPExcel_IOFactory::load('./test10-1.xlsx'); // CSV書込クラス生成 $objWriter = new PHPExcel_Writer_CSV($objPHPExcel); // 区切り記号(カンマ) $objWriter->setDelimiter(','); // 文字列の囲み文字(") $objWriter->setEnclosure('"'); // 改行コード $objWriter->setLineEnding("\r\n"); // 「UTF-8」ファイルとしての「BOM」ファイルヘッダ $objWriter->setUseBOM(true); // シートの位置 $objWriter->setSheetIndex(0); // 書込み処理 $objWriter->save("test10-3.csv"); exit(); ?>
出力されたCSVファイル「test10-3.csv」は以下の様になります。
"AAAAAAA","BBB","CCC" "aaaa","bbb","ccc" "ああああ","いいい","漢字データ"
生成されるCSVファイルは「UTF-8」のコードですが、「BOM」ファイルヘッダが在るため、エクセルでもそのまま開くことが出来ます。
-
今回は PHPExcel で行う「ワークシート」の「列(カラム)」及び「行」の 「幅設定、表示・非表示設定、グループ化/アウトライン化設定」 について説明したいと思います。
それぞれは別々の項目ですが、「列(カラム)」及び「行」の見え方に関する処理ですので、ここでまとめて説明します。■列(カラム)の幅の設定
列(カラム)の幅の設定を行うには ワークシートオブジェクト の getColumnDimension() メソッドで 列の寸法オブジェクト を取得し setWidth() メソッドで列(カラム)の幅の設定を行います。
setWidth() メソッドの引数は文字幅の単位を指定しますが、文字幅はブックの 既定のフォントの'0'(ゼロ)文字の幅 の様です。
以下に例を示します。
ワークシートのデフォルトスタイルのフォント名を 「MS Pゴシック」 フォントサイズを 「14」 に設定します。
その後 setWidth メソッドで 12文字分 に設定します。
[B1]セルに「0」を12文字設定し「B」列の幅が フォントの'0'の12文字分の幅 になっているか確認します。
<?php // ライブラリ読込 require_once './PHPExcel-1.8/Classes/PHPExcel.php'; // PHPExcelオブジェクト作成 $objBook = new PHPExcel(); // ワークシートオブジェクト $objSheet = $objBook->getActiveSheet(); // デフォルトスタイルオブジェクト取得 $objDefaultStyle = $objSheet->getDefaultStyle(); // フォントオブジェクト取得 $objFont = $objDefaultStyle->getFont(); // フォント名設定 $objFont->setName('MS Pゴシック'); // フォントサイズ設定 $objFont->setSize(14); // 列の寸法オブジェクトの setWidth メソッド $objSheet->getColumnDimension('B')->setWidth(12); // [B1]セルに「0」を12文字設定 $objSheet->setCellValue('B2', '000000000000'); // [test9-1.xlsx]:Excel2007形式で保存する $objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007"); $objWriter->save('test9-1.xlsx'); exit(); ?>
出力されたエクセルファイルを見てみると以下の様になります。
「B」列の幅がほぼ文字列「000000000000」('0'12個分)になっています。■列(カラム)の表示・非表示の設定
ワークシートの列の可視性を設定するには ワークシートオブジェクト の getColumnDimension() メソッドで 列の寸法オブジェクト を取得し setVisible() メソッドで列(カラム)の表示・非表示の設定を行います。 以下のソースは「B」列を明示的に示し、「C」列を非表示にします。
<?php // ライブラリ読込 require_once './PHPExcel-1.8/Classes/PHPExcel.php'; // PHPExcelオブジェクト作成 $objBook = new PHPExcel(); // ワークシートオブジェクト $objSheet = $objBook->getActiveSheet(); // 列の寸法オブジェクトの setVisible メソッド $objSheet->getColumnDimension('B')->setVisible(true); $objSheet->getColumnDimension('C')->setVisible(false); // [test9-2.xlsx]:Excel2007形式で保存する $objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007"); $objWriter->save('test9-2.xlsx'); exit(); ?>
出力されたエクセルファイルを見てみると以下の様になります。
「C」列が非表示なっているのが分かります。■列(カラム)のグループ化/アウトライン化の設定
列をグループ化/アウトライン化するには ワークシートオブジェクト の getColumnDimension() メソッドで 列の寸法オブジェクト を取得し setOutlineLevel() メソッドでアウトラインのレベル設定を行います。
列の寸法オブジェクト の setCollapsed() メソッドで折りたたみの設定を行います。 また、列を非表示に設定しないと、折りたたみはExcel 2007で表示されません。
<?php // ライブラリ読込 require_once './PHPExcel-1.8/Classes/PHPExcel.php'; // PHPExcelオブジェクト作成 $objBook = new PHPExcel(); // ワークシートオブジェクト $objSheet = $objBook->getActiveSheet(); // 列の寸法オブジェクトの setOutlineLevel メソッド $objSheet->getColumnDimension('C')->setOutlineLevel(1); // 列の寸法オブジェクトの setCollapsed メソッド(折りたたむ) $objSheet->getColumnDimension('C')->setCollapsed(true); // 列の寸法オブジェクトの setVisible メソッド(非表示) $objSheet->getColumnDimension('C')->setVisible(false); // [test9-3.xlsx]:Excel2007形式で保存する $objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007"); $objWriter->save('test9-3.xlsx'); exit(); ?>
出力されたエクセルファイルを見てみると以下の様になります。
■行の高さ設定
行の高さ設定を行うには ワークシートオブジェクト の getRowDimension() メソッドで 行の寸法オブジェクト を取得し setRowHeight() メソッドで行の高さ設定を行います。
Excelは行の高さをポイントで換算します。 「1」ポイントは「1/72」インチ(または約0.35mm)です。 デフォルト値は12.75ポイントで、値の許容範囲は「0」~「409」ポイントです。 「0」ポイントの設定は非表示の行です。
<?php // ライブラリ読込 require_once './PHPExcel-1.8/Classes/PHPExcel.php'; // PHPExcelオブジェクト作成 $objBook = new PHPExcel(); // ワークシートオブジェクト $objSheet = $objBook->getActiveSheet(); // 行の寸法オブジェクトの setRowHeight メソッド(50ポイント) $objSheet->getRowDimension('2')->setRowHeight(50); // 行の寸法オブジェクトの setRowHeight メソッド(0ポイント:非表示) $objSheet->getRowDimension('4')->setRowHeight(0); // [test9-4.xlsx]:Excel2007形式で保存する $objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007"); $objWriter->save('test9-4.xlsx'); exit(); ?>
出力されたエクセルファイルを見てみると以下の様になります。
■行の表示・非表示の設定
ワークシートの行の可視性を設定するには ワークシートオブジェクト の getRowDimension() メソッドで 行の寸法オブジェクト を取得し setVisible() メソッドで列(カラム)の表示・非表示の設定を行います。
以下のソースは「2,4,6」行を非表示にします。
<?php // ライブラリ読込 require_once './PHPExcel-1.8/Classes/PHPExcel.php'; // PHPExcelオブジェクト作成 $objBook = new PHPExcel(); // ワークシートオブジェクト $objSheet = $objBook->getActiveSheet(); // 行の寸法オブジェクトの setVisible メソッド $objSheet->getRowDimension('2')->setVisible(false); $objSheet->getRowDimension('4')->setVisible(false); $objSheet->getRowDimension('6')->setVisible(false); // [test9-5.xlsx]:Excel2007形式で保存する $objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007"); $objWriter->save('test9-5.xlsx'); exit(); ?>
出力されたエクセルファイルを見てみると以下の様になります。
「2,4,6」行が非表示なっているのが分かります。■行のグループ化/アウトライン化の設定
行をグループ化/アウトライン化するには ワークシートオブジェクト の getColumnDimension() メソッドで 行の寸法オブジェクト を取得し setOutlineLevel() メソッドでアウトラインのレベル設定を行います。
行の寸法オブジェクト の setCollapsed() メソッドで折りたたみの設定を行います。 また、行を非表示に設定しないと、折りたたみはExcel 2007で表示されません。
<?php // ライブラリ読込 require_once './PHPExcel-1.8/Classes/PHPExcel.php'; // PHPExcelオブジェクト作成 $objBook = new PHPExcel(); // ワークシートオブジェクト $objSheet = $objBook->getActiveSheet(); // 行の寸法オブジェクトの setOutlineLevel メソッド $objSheet->getRowDimension('2')->setOutlineLevel(1); // 行の寸法オブジェクトの setCollapsed メソッド(折りたたむ) $objSheet->getRowDimension('2')->setCollapsed(true); // 行の寸法オブジェクトの setVisible メソッド(非表示) $objSheet->getRowDimension('2')->setVisible(false); // [test9-6.xlsx]:Excel2007形式で保存する $objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007"); $objWriter->save('test9-6.xlsx'); exit(); ?>
出力されたエクセルファイルを見てみると以下の様になります。
-
今回は 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」に設定した国の一覧がドロップダウンリストに表示されます)
-
今回はクラスの中の return $this について説明したいと思います。 自分を返すって何?って思うかもしれませんが、この方法はいろんなところで使われています。
百聞は一見にしかず、以下のサンプルソースを見て下さい。 名前クラスとして foo を宣言しています。内容的にはファーストネーム、ラストネームを別々の関数で設定し、フルネームを取得する関数があります。
ファーストネーム、ラストネームの設定する関数の戻り値として $this を返します。これは自分自身のクラスのインスタンスを示します。 (インスタンスはクラスの実体の参照のことです。)
この参照を連続的に使用しているのが40行目のファーストネーム、ラストネームの設定の部分です。 -> でつないで、ファーストネーム設定の戻りのインスタンスを使用して更にラストネーム設定を行っています。
■return $this の例のクラス
<?php // 名前クラス class foo { private $firstName; // ファーストネーム private $lastName; // ラストネーム // ファーストネーム設定 public function setFirstName($value = '') { $this->firstName = $value; return $this; // 自分自身のインスタンスを返す } // ラストネーム設定 public function setLastName($value = '') { $this->lastName = $value; return $this; // 自分自身のインスタンスを返す } // フルネーム取得(日本式) public function getFullName() { return $this->lastName.' '.$this->firstName; } public function getFirstName() { return $this->firstName; } public function getLastName() { return $this->lastName; } } // foo オブジェクト作成 $objFoo = new foo(); // 「山田 太郎」の名前設定 $objFoo->setFirstName('太郎')->setLastName('山田'); // 名前全体を取得 echo "名前全体:".$objFoo->getFullName(); ?>
これを実行するとブラウザに「名前全体:山田 太郎」のみが表示されます。
クラスの中で return $this をするのはクラスへの値設定がほとんどだと思います。
このサイトの記事で PHPExcel を紹介していますが、その中で以下の様なテスト処理を行いますが、 -> でつないで処理しているところがあります。
各種の設定を1行で一気に書けて便利ですが、やり過ぎは禁物かと思います。 その時はオブジェクトを少しずつ分けて処理すると見やすくはなります。
■PHPExcel の使用例
<?php // ライブラリ読込 require_once './PHPExcel-1.8/Classes/PHPExcel.php'; // PHPExcelオブジェクト作成 $objBook = new PHPExcel(); // ワークシートオブジェクト $objSheet = $objBook->getActiveSheet(); // スタイルオブジェクト取得([B2]セル) $objStyle = $objSheet->getStyle('B2'); // フォアグランド(前景)色を「白色」に設定 $objStyle->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE); // 水平アライメントを「右寄せ」に設定 $objStyle->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); // ボーダーオブジェクト取得([B2]セル) $objBorders = $objStyle->getBorders(); // ボーダー全て(Top, Bottom, Left, Right)を「細い線:BORDER_THICK」に設定 $objBorders->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK); $objBorders->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK); $objBorders->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK); $objBorders->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK); // フィルオブジェクト取得([B2]セル) $objFill = $objStyle->getFill(); // 背景のタイプを「塗つぶし」に設定 $objFill->setFillType(PHPExcel_Style_Fill::FILL_SOLID); // 背景色を「赤」に設定 $objFill->getStartColor()->setARGB('FFFF0000'); // [B2]セルに文字列設定 $objSheet->setCellValue('B2', 'ABCDEF'); // [test6-1.xlsx]:Excel2007形式で保存する $objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007"); $objWriter->save('test6-1.xlsx'); exit(); ?>