【PHP】PHPExcelを使うときにセルの書式設定を変更する方法

  • 2017年12月6日
  • 2017年12月6日
  • 未分類

今回は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の知っているとちょっと便利なメソッドでした。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG