PHP

PHPからExcel出力

Laravel+VueでTrello Cloneを作ろう

いつも当ブログをご覧いただき、誠にありがとうございます。
最近は、暑くて不快な日が続いているので、皆さんも長くて頭を使う内容なんて読みたく無いと思います。

なので、今日はPHPで簡単な処理をご紹介したいと思います。

今日は、PHPからExcelファイルを出力する方法を簡単に書いていきたいと思います。

Excel出力は、業務システムを作る上で、ほぼ必須となりますので、是非、使い方を覚えて下さいね!

PhpSpreadsheetをインストール

では、早速初めていきたいと思います。

まず、ローカル環境を立ち上げ、ターミナルまたは、コマンドプロンプトでルートディレクトリへ移動し、作業フォルダーを作成して下さい。

> cd /var/www/html/
> mkdir test
> cd test

Composerでインストール

皆さんは、Composerを利用していますか?
現在のPHP開発では、ほぼ必須となっている「パッケージ管理ツール」がComposerになります。

Composerは、ライブラリの依存関係を自動で解決してくれたり、クラスの自動読み込み(オートロード)が利用できたりと、とても便利なツールになります。

詳しい使い方は、今後、別の記事にしていくので、取り敢えず下記のリンクより、インストールして、Composerコマンドを利用できる様にして下さい。

https://getcomposer.org/

ダウンロードして、インストーラーで順に進んでいくだけなので、簡単にインストールできたかと思います。

続いて、ターミナルで下記コマンドを実行して下さい。

composer require phpoffice/phpspreadsheet "^1.5.0"

詳しい説明は省略しますが、これでディレクトリないに必要なパッケージがダウンロードされています。

Excelテンプレートを利用して出力

それでは早速使用してみましょう。

分かりやすい構造にしたいので、新しく[excel]という名前のディレクトリを作成し、[output.php]という名前で、PHPファイルを作成して下さい。

そして、同じディレクトリないに[temp.xlsx]というエクセルファイルを用意して下さい。

ファイルの中身は、図の様な感じでお願いします。

続いて、PHPファイルを下記の様に編集して下さい。

<?php

declare(strict_types=1);

require_once dirname(__FILE__) . '/../../vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Cell\DataType;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\IOFactory;

$spreadsheet = IOFactory::load('temp.xlsx');

$sheet = $spreadsheet->getActiveSheet();

$sheet->setCellValue('A3', 'ソファー');
$sheet->setCellValue('B3', 1);
$sheet->setCellValue('C3', 200000);
$sheet->setCellValue('D3', 'I-0001');

$sheet->setCellValue('A4', 'コーヒーカップ');
$sheet->setCellValue('B4', 2);
$sheet->setCellValue('C4', 300);
$sheet->setCellValue('D4', 'C-0001');

$sheet->setCellValue('B5', 200600);

header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="PHPから出力見積書.xlsx"'); 
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');

では、このファイルをブラウザから実行してみて下さい。

上記のコードで記述している下記の部分が書き込まれたエクセルファイルをダウンロードできたかと思います。

$sheet->setCellValue('A3', 'ソファー');
$sheet->setCellValue('B3', 1);
$sheet->setCellValue('C3', 200000);
$sheet->setCellValue('D3', 'I-0001');

$sheet->setCellValue('A4', 'コーヒーカップ');
$sheet->setCellValue('B4', 2);
$sheet->setCellValue('C4', 300);
$sheet->setCellValue('D4', 'C-0001');

$sheet->setCellValue('B5', 200600);

直感的に分かりやすくセルを指定して操作できます。

配列などから転記するコードなども、簡単にかけるので、実際の業務でも、かなり凝った事が、簡単にできるかと思います。

まとめ

いかがでしたか?
とても簡単なコードで、実装できたかと思います。

今回は、生のPHPのコードで説明しましたが、LaravelやPhalconなどのフレームワークを使用した開発でも、簡単に取り入れる事ができるかと思います。

今回、テンプレートエクセルファイルを使用した説明でしたが、テンプレートファイルが無い状態から、エクセルファイルを作り出すこともできます。

現在の開発では、いかに既存のライブラリを使うかが、とても重要です。
便利なライブラリの活用方法を、今後もお伝えしていきます。

最後まで、ありがとうございました!