後継のPHPSpreadsheetの登場により、すでにメンテナンス対象外で、アーカイブされているPHPExcel。
ですが、PHPの動作環境上やむを得ず使用することになり、試しに動かしてみたので、覚え書きしておきます。
環境
- OS: Amazon Linux2
- PHP: 5.4.16
→ 本記事では、EC2インスタンスは準備済を想定。PHPのインストールから行います
事前準備
EC2インスタンスにSSH接続して、以下を実行。
PHP5系のインストール
Remi's RPM repository - Configuration wizard | rpms.remirepo.net
にアクセスして、以下の通り設定。
PHPのバージョンは動作環境にいちばん近い5.4.45を選択しました。
基本的には、上記の通り選択すると出現するコマンドを上から順に実行していくだけですが、こちらも記載しておきます(必要に応じて、sudoやyオプションを付けました)。
# EPELリポジトリのコンフィギュレーションパッケージをインストール
$ sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# Remiリポジトリのコンフィギュレーションパッケージをインストール
$ sudo yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
# yum-utilパッケージをインストール
$ sudo yum -y install yum-utils
# PHP5.4のリポジトリのみ有効にする
$ sudo yum-config-manager --disable 'remi-php*'
$ sudo yum-config-manager --enable remi-php54
# 有効なリポジトリの一覧を確認
$ yum repolist
$ sudo yum -y update
# PHPのインストール
sudo yum install -y php
PHPのバージョンを確認し、以下の通り出ていればOK
$ php --version
PHP 5.4.16 (cli) (built: Oct 31 2019 18:34:05)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
php-xmlのインストール
PHPExcelでは、XMLWriterを継承している箇所があります。
XMLWriterを使用するには、php-xmlが必要なので、こちらもインストールしておきます。
sudo yum -y install php-xml
Gitのインストール
GitHubより、リポジトリを取得するので、Gitのインストールがまだの場合はこちらも入れておきましょう。
sudo yum -y install git-all
※参考: Git - Gitのインストール | git-scm.com
PHPExcelリポジトリの取得
GitHubより、PHPExcelをクローンします。
01-Getting-Started.mdによれば、Classes配下があればOKとのことですが、サンプル等もすぐ参照できるようまるっと取得しておきます。
# 今回は、/usr/lib配下に配置
$ cd /usr/lib
$ sudo git clone https://github.com/PHPOffice/PHPExcel
お試し実行
お試しとして、以下の2パターンをやってみました。
(1) 新規Excelファイルを作成して値を書き込む
(2) テンプレートファイルをもとに(読み込んで)Excelファイルを作成 & 値を書き込む
ディレクトリ構成
ディレクトリ構成は以下の通り
/develop/sample/php
|
php
|----sampleMake.php → (1) 新規Excelファイルを作成して値を書き込むプログラム
|
|----sampleCopy.php → (2) テンプレートファイルをもとに(読み込んで)Excelファイルを作成 & 値を書き込む
|
|---- templates → テンプレート格納先
| |---- sample.xlsx → テンプレートとなるExcelファイル((2)で使用)
|
|---- outputs → 出力ファイル格納先
| |---- sampleMake.xlsx → sampleMake.php (1) の実行により、作成されるファイル
| |---- sampleCopy.xlsx → sampleCopy.php (2) の実行により、作成されるファイル
(1) 新規Excelファイルを作成して値を書き込む
サンプルコードは以下の通り(エラーハンドリングはせず、最低限の内容にしています: (2)も同様)
PHPExcel本家のサンプルコード 01simple.php を参考にしています。
<?php
require_once '/usr/lib/PHPExcel/Classes/PHPExcel.php';
date_default_timezone_set('Asia/Tokyo');
// 出力ファイルに関する定義
$outputFileType = 'Excel2007';
$outputFileName = 'outputs/sampleMake.xlsx';
$objPHPExcel = new PHPExcel();
// 0枚目のシートのセルに値をセット
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'PHPExcel')
->setCellValue('A2', 'test');
// アクティブシートに名前をつける
$objPHPExcel->getActiveSheet()->setTitle('テスト');
// Excelファイルを作成&保存
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, $outputFileType);
$objWriter->save($outputFileName);
outputsに出力されるsampleMake.xlsxの内容は以下の通り
(2) テンプレートファイルをもとに(読み込んで)Excelファイルを作成 & 値を書き込む
以下、サンプルコード
PHPExcel本家のサンプルコード 31docproperties_write.php を参考にしています。
<?php
require_once '/usr/lib/PHPExcel/Classes/PHPExcel/IOFactory.php';
date_default_timezone_set('Asia/Tokyo');
// 各種定義
$inputFileType = 'Excel2007';
$inputFileName = 'templates/sample.xlsx';
$outputFileType = 'Excel2007';
$outputFileName = 'outputs/sampleCopy.xlsx';
// テンプレートファイルの読み込み
$objPHPExcelReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objPHPExcelReader->load($inputFileName);
// 値の書き込み
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('C3', 51)
->setCellValue('C4', 67)
->setCellValue('C5', 49)
->setCellValue('C6', 56)
->setCellValue('C7', 71)
->setCellValue('C8', 62);
// ファイルを保存
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, $outputFileType);
$objWriter->save($outputFileName);
outputsディレクトリに出力されたファイルは以下の通り
終わりに
実行環境上、やむを得ないとはいえ、できる限りPHPSpreadsheetを使うようにしていきたいところ。
アーカイブされて時間もたってるので、本家リポジトリに記載の参照リンク先が存在しないのも地味に辛い・・
実装の際は、リプレイスしやすい内容にすることを心がけたいと思います。