PHPでExcelならこれ!PhpSpreadsheetを使ってみる〜出力編〜

こんにちは。コバヤシです。

前回に引き続き、PhpSpreadsheetについて書いていきます。
今回はExcelファイルの作成です。

前回の記事はこちら。

tech.arms-soft.co.jp

まずは作成してみる

<?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 現在) 早く復活してほしいところです。