勉強したことのメモ

webプログラマが勉強したことのメモ。

PHPでExcelシートを出力する方法(PhpSpreadsheet)

   

PHPでエクセルシートを出力させたい。以前はPHPExcelを利用していたが現在は非推奨らしく後継のPhpSpreadsheetというライブラリを使うのが良いとのこと。以下に導入方法と使用方法をメモ。

 

公式サイト

https://phpspreadsheet.readthedocs.io/en/latest/

 

PhpSpreadsheetのインストール

今回のサーバはcomposerをインストールしていなかったのでそこからスタート。尚、CentOS7とPHP7.4の環境で作業した。適当なディレクトリを作成、移動し以下でインストールする。

#composerのインストール
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

#バージョン確認
composer --version

#以下のような表示になればOK
#Composer version 2.3.3 2022-04-01 22:15:35

#必要なライブラリをインストール
yum --enablerepo=emi,remi-php74 install -y php-xml php-gd php-mbstring php-zip

#phpSpreadsheetをインストール
composer require phpoffice/phpspreadsheet

 

ソースコード

<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Reader\Xls as XlsReader;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as Reader;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;

//スプレッドシートを作成
$spreadsheet = new Spreadsheet();

//シート作成
$spreadsheet->getActiveSheet('sheet1')->UnFreezePane();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setTitle("シート名");

//タイトルを設定
$sheet->setCellValue('A1', '名前');
$sheet->setCellValue('B1', '年齢');

//値を設定
$data = array(
    0 => array('山田', 20,),
    1 => array('鈴木', 30,),
    2 => array('佐藤', 40,),
    3 => array('田中', 50,),
    4 => array('藤井', 60,),
);
$sheet->fromArray($data, NULL, 'A2', true);

//バッファをクリア
ob_end_clean();

//ファイル名
$fileName = "test.xlsx";

//ダウンロード
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$fileName.'"');
header('Cache-Control: max-age=0');
header('Cache-Control: max-age=1');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: cache, must-revalidate');
header('Pragma: public');

$writer = new Xlsx($spreadsheet);
$writer->save('php://output');

exit();

?>

 

所感

ちょっとしたエクセル作成なら簡単にできそう。あまり凝ったことはしないのであれば十分使えるかと。

 

参考サイト

https://wiblok.com/blog/spreadsheet/

https://www.logw.jp/cloudserver/9832.html

https://blitzgate.co.jp/blog/1636/

 - PHP

  関連記事

PHPで携帯(スマホ含)とPCの判別

PHPにて携帯(スマホ含む)とPCで処理を振り分けたかったのでメモ。 <? ...

jQuery.uploadでリアルタイムプレビュー

やりたい事は、 ・<input type="file">で画像を選択 ...

PHPの配列をファイルに保存してPHPやJSで呼び出す

PHPの配列をファイルとして保存し、別のページからPHPやJavaScriptで ...

PHPでBlowfishを用いた暗号と復号化

PHPでBlowfishを用いてCBCモードで暗号化と復号化を行いたかった。Pe ...

jQueryとprototypeの共存

prototypeを先に使っているがjQueryに移行してきている ページで、尚 ...

composerでmonologとTwigをインストール

「composerで○○をインストール」というのをよく見かけるがcomposer ...

PHPのfor文とforeach文

ループ処理の際、forとforeachのどっちでもいけそうな場合、 特にどっちを ...

PHPでクエリ内容を取得する

エラーログを確認している際によく分からない動作に なっているところがあった。 ペ ...

PHPとSQLiteで簡易BBSの作成

PHPとSQLiteの練習で簡易掲示板を作ったのでメモ。   &nbs ...

PHPでCSVファイル出力用の関数

ここのところログ系をCSVファイル出力にするケースが多かった為、使いまわせるよう ...