今回はPHPでのエクセルファイルの作成についてです。
ライブラリは、PHPExcelを使用しています。
まずは事前準備から。
ライブラリ導入は、Githubからダウンロードしてきて、requre_once で読み込むだけでOKです。
URLはこちらから。
PHPOffice/PHPExcel
https://github.com/PHPOffice/PHPExcel.git
//ライブラリ読み込み require_once APPPATH.'../packages/excel/Classes/PHPExcel.php'; require_once APPPATH.'../packages/excel/Classes/PHPExcel/IOFactory.php';
パスは任意の場所に修正してください。
そしてエクセルファイルの作成から、編集するシートの設定までは下記の通り。
// PHPExcelオブジェクトを生成する
$book = new PHPExcel();
// テンプレート読み込み
$phpexcel = \PHPExcel_IOFactory::load('./tmp/template.xlsx');
$phpexcel->setActiveSheetIndex(0);
// カレントシート選択
$sheet = $phpexcel->getActiveSheet();
// シート名変更
$sheet->setTitle('データ');
今回はテンプレートを読み込んでいますが、もちろん新規のファイルを作成して、それを編集することも可能です。
セルに文字列や数値を入れる時は setCellValue() や setCellValueExplicit() メソッドを使います。
// 数値
$sheet->setCellValue('A2', 0123);
// 文字列
$sheet->setCellValueExplicit('A1', "あいうえお", \PHPExcel_Cell_DataType::TYPE_STRING);
このあたりは分かりやすいですね。
本題はここから。
セルの書式設定を変える方法は下記のとおりです。
// 数値表示(小数点第2位まで)
$sheet->setCellValue('B1', 12.345);
$sheet->getStyle('B1')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_00);
// 12.35
// 数値表示(小数点第2位まで & 3桁でカンマ区切り)
$sheet->setCellValue('B2', 8765.4321);
$sheet->getStyle('B2')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1);
// 8,765.43
// パーセント表示(小数点第2位まで)
$sheet->setCellValue('B3', 0.56789);
$sheet->getStyle('B3')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00);
// 56.79%
上記のように表示形式の定数が設定されており、それを指定して使用することができます。
他にもありましたが、使用頻度が高そうなのはこのあたりかな。
なお、下記のように自分で指定することもできます。
// 数値表示(3桁でカンマ区切り)
$sheet->setCellValue('C1', 12345);
$sheet->getStyle('C1')->getNumberFormat()->setFormatCode('#,##0');
// 12,345
指定方法は、エクセルのセルの書式設定の時と同じですね。
こちらの方法を使えば、小数値をパーセントに直すときに、100をかけて、% を後ろにつけて…なんて作業をやらずに済みますね。
というか、最初表示形式の指定方法を知らなくて、上のように文字列でパーセント表示をさせようとしてしまいました。
当たり前ですが、こちらの方が遥かに楽です。
また、エクセルを開いたときに時折見かける、「数値が文字列として保存されています」という警告も防げます。
個人的には、これが一番嬉しいですね。
ということで、PHPExcelの知っているとちょっと便利なメソッドでした。
 
					         
               
                       
												 
                