PHP
Excel
PHPExcel
PhpSpreadsheet

PHPExcelが非推奨になったので後継のPhpSpreadsheetを使ってみる

PhpSpreadsheetが正式にリリースされたことでPHPExcelは非推奨になりました。

今後PHPでExcelを操作する場合はPhpSpreadsheetを使ったほうがよさそうですね。

PhpSpreadsheetとは?

ExcelやCsvを読み書きすることのできるPHPライブラリです。

Googleのスプレッドシートは関係無いので勘違いしないように...:raised_hand:

インストール

おなじみのcomposerでインストール:relaxed:

$composer require phpoffice/phpspreadsheet

以下のphpを実行すると動作に必要なPHP拡張があるかチェックすることができます。

$php vendor/phpoffice/phpspreadsheet/samples/index.php 
Requirement check:
PHP 5.6.0 ...  passed
PHP extension XML ...  passed
PHP extension xmlwriter ...  passed
PHP extension mbstring ...  passed
PHP extension ZipArchive ...  passed
PHP extension GD (optional) ...  passed
PHP extension dom (optional) ...  passed

プロパティの設定

プロパティを設定だけのファイルを作ってみます。

<?php

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spreadsheet = new Spreadsheet();

$spreadsheet->getProperties()
    ->setTitle('タイトル')
    ->setSubject('サブタイトル')
    ->setCreator('作成者')
    ->setCompany('会社名')
    ->setManager('管理者')
    ->setCategory('分類')
    ->setDescription('コメント')
    ->setKeywords('キーワード');

$writer = new Xlsx($spreadsheet);
$writer->save('test.xlsx');

スクリーンショット 2018-01-09 18.07.42.png

ファイル書き込み

配列を挿入したり数式を入れてみます。

<?php

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();

$sheet->setCellValue('A1', 'テストA1');
$sheet->getCell('A2')->setValue('テストA2');

$sheet
    ->setCellValue('A4', 10)
    ->setCellValue('A5', 5)
    ->setCellValue('A6', '=A4 + A5');

$arrayData = [
    [NULL, 2016, 2017, 2018],
    ['Q1', 12, 15, 21],
    ['Q2', 56, 73, 86],
    ['Q3', 52, 61, 69],
    ['Q4', 30, 32, 0],
];
$sheet->fromArray($arrayData, NULL, 'C3');
// 第四引数をtrueにしないと緩い比較が行われて0がnullとして扱われるため空欄になるので注意
$sheet->fromArray($arrayData, NULL, 'C9', true);

$writer = new Xlsx($spreadsheet);
$writer->save('test.xlsx');

スクリーンショット 2018-01-09 18.13.30.png

ファイル読み込み

上で作ったExcelを読み込んでみます。

数式や計算後の値も取得することが出来ます。
変更して保存なんかもやってみます。

<?php

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Writer\Xlsx as Writer;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as Reader;

$reader = new Reader();
$spreadsheet = $reader->load('test.xlsx');

$sheet = $spreadsheet->getActiveSheet();

echo $sheet->getCell('A6')->getValue(); // =A4 + A5
echo $sheet->getCell('A6')->getCalculatedValue(); // 15

$sheet->setCellValue('A6', '=A4 * A5');

$writer = new Writer($spreadsheet);
$writer->save('test.xlsx');

スクリーンショット 2018-01-09 19.26.27.png