3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PHPExcelを動かしてみた

Last updated at Posted at 2022-01-23

後継のPHPSpreadsheetの登場により、すでにメンテナンス対象外で、アーカイブされているPHPExcel。
ですが、PHPの動作環境上やむを得ず使用することになり、試しに動かしてみたので、覚え書きしておきます。

環境

  • OS: Amazon Linux2
  • PHP: 5.4.16

→ 本記事では、EC2インスタンスは準備済を想定。PHPのインストールから行います

事前準備

EC2インスタンスにSSH接続して、以下を実行。

PHP5系のインストール

Remi's RPM repository - Configuration wizard | rpms.remirepo.net
にアクセスして、以下の通り設定。

image.png

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の内容は以下の通り

image.png

(2) テンプレートファイルをもとに(読み込んで)Excelファイルを作成 & 値を書き込む

テンプレートファイルの内容は以下の通り
image.png

以下、サンプルコード
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ディレクトリに出力されたファイルは以下の通り

image.png

終わりに

実行環境上、やむを得ないとはいえ、できる限りPHPSpreadsheetを使うようにしていきたいところ。
アーカイブされて時間もたってるので、本家リポジトリに記載の参照リンク先が存在しないのも地味に辛い・・

実装の際は、リプレイスしやすい内容にすることを心がけたいと思います。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?