こんにちは。コバヤシです。
前回に引き続き、PhpSpreadsheetについて書いていきます。
今回はExcelファイルの作成です。
前回の記事はこちら。
まずは作成してみる
<?php include('./vendor/autoload.php'); use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; // スプレッドシート作成 $spreadSheet = new Spreadsheet(); // 保存 $writer = new Xlsx($spreadSheet); $writer->save('./hoge-test.xlsx');
これだけで、Excelファイルが作成されます。 ファイルを開いてみるとわかるのですが、すでに1つシートが作成されているので このシートのセルに値をセットしてみたいと思います。
セルに値を入れる
<?php include('./vendor/autoload.php'); use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; // スプレッドシート作成 $spreadSheet = new Spreadsheet(); // シートを取得 $sheet = $spreadSheet->getSheet(0); // セルに値をセット $sheet->setCellValue("A1", 'ほげほげ'); $writer = new Xlsx($spreadSheet); $writer->save('./hoge-test.xlsx');
シートを取得し、setCellValueで値をセットします。
ここではシートの取得にgetSheetを使いインデックスを指定していますが、 getSheetByNameを使用してシート名で取得することもできます。
<?php $sheet = $spreadSheet->getSheetByName('Worksheet');
改行のある文字を入力する
<?php $sheet->getStyle('A1')->getAlignment()->setWrapText(true); $sheet->setCellValue('A1', "あああ\nいいい\nううう");
setWrapTextをtrueにした後に、setCellValueで値をセットします。
改行文字があれば自動で改行してくれると楽なのですが。。。
文字サイズを変更する
<?php $sheet->setCellValue('B2', 'ああああ'); $sheet->getStyle('B2')->getFont()->setSize(24);
文字色・セルの背景色を変更する
<?php $sheet->setCellValue('A1', 'ああああ'); // 文字色を赤にする $sheet->getStyle('A1')->getFont()->getColor()->setARGB('AE0035'); // 背景色を青くする $sheet->getStyle('A1')->getFill()->setFillType('solid')->getStartColor()->setARGB('1E36C7');
いずれもARGBで指定することに注意して下さい。 (setRGBもあります)
文字揃えを変更する
<?php // 右寄せ $sheet->getStyle('A1')->getAlignment()->setHorizontal('right'); // 左寄せ $sheet->getStyle('A2')->getAlignment()->setHorizontal('left'); // 中央寄せ (横) $sheet->getStyle('A3')->getAlignment()->setHorizontal('center'); // 上寄せ $sheet->getStyle('A4')->getAlignment()->setVertical('top'); // 中央寄せ(縦) $sheet->getStyle('A5')->getAlignment()->setVertical('center'); // 下寄せ $sheet->getStyle('A6')->getAlignment()->setVertical('bottom');
セルをマージする
<?php $sheet->mergeCells('A1:C3'); $sheet->setCellValue('A1', 'マージされたセル');
上記のように書くと、セルをマージして値をセットできます。
枠線
<?php $borders = $sheet->getStyle('B2')->getBorders(); $borders->getBottom()->setBorderStyle('thick');
ここではgetBottom()で下を指定していますが、 getTop、getLeft、getRightを使用して上、左、右を指定できます。
setBorderStyleで先の太さを指定します。
thick : 太線
thin : 細線
となります。
まとめ
読み込みと同じように豊富なメソッドが用意されていて、大抵のことはできそうですね。 もっと調べていきたいところですが、 残念なことに、PhpSpreadsheetのAPIドキュメントにアクセスできないようです。(2020/06/02 現在) 早く復活してほしいところです。