PHPからグラフ付きのExcelファイルを作ってダウンロードさせる機能を構築すべく、PhpSpreadsheetをインストールしました。少しつまづいたのでそのつめあとを残します。
※PHPExcelが非推奨となって、その後継がPhpSpreadsheetのようです。
ちなみにPHPは7.1です。
1.composerインストール
PhpSpreadsheetのインストールはcomposerを使うので、composerが入っていない場合はインストールします。
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php composer-setup.php php -r "unlink('composer-setup.php');" mv composer.phar /usr/local/bin/composer
2.PhpSpreadsheetインストール
composer.jsonを、インストールしたいディレクトリに作成します。
例:
{ "require": { "phpoffice/phpspreadsheet": "^1.2" } }
インストールします。
composer require "phpoffice/phpspreadsheet"
するとなにやらエラーが。
Using version ^1.2 for phpoffice/phpspreadsheet ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Your requirements could not be resolved to an installable set of packages. Problem 1 - phpoffice/phpspreadsheet 1.2.1 requires ext-zip * -> the requested PHP extension zip is missing from your system. - phpoffice/phpspreadsheet 1.2.0 requires ext-zip * -> the requested PHP extension zip is missing from your system. - Installation request for phpoffice/phpspreadsheet ^1.2 -> satisfiable by phpoffice/phpspreadsheet[1.2.0, 1.2.1]. To enable extensions, verify that they are enabled in your .ini files: - /etc/php.ini - /etc/php.d/10-opcache.ini - /etc/php.d/20-bz2.ini - /etc/php.d/20-calendar.ini - /etc/php.d/20-ctype.ini - /etc/php.d/20-curl.ini - /etc/php.d/20-dom.ini - /etc/php.d/20-exif.ini - /etc/php.d/20-fileinfo.ini - /etc/php.d/20-ftp.ini - /etc/php.d/20-gd.ini - /etc/php.d/20-gettext.ini - /etc/php.d/20-iconv.ini - /etc/php.d/20-json.ini - /etc/php.d/20-mbstring.ini - /etc/php.d/20-mcrypt.ini - /etc/php.d/20-mysqlnd.ini - /etc/php.d/20-pdo.ini - /etc/php.d/20-phar.ini - /etc/php.d/20-simplexml.ini - /etc/php.d/20-sockets.ini - /etc/php.d/20-sqlite3.ini - /etc/php.d/20-tokenizer.ini - /etc/php.d/20-xml.ini - /etc/php.d/20-xmlwriter.ini - /etc/php.d/20-xsl.ini - /etc/php.d/30-mysqli.ini - /etc/php.d/30-pdo_mysql.ini - /etc/php.d/30-pdo_sqlite.ini - /etc/php.d/30-wddx.ini - /etc/php.d/30-xmlreader.ini You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode. Installation failed, reverting ./composer.json to its original content.
zipがねーよって言ってるように聞こえるので、zipをインストールしてみます。
yum -y install --enablerepo=remi,remi-php71 php-zip
再度インストールしてみます。
composer require "phpoffice/phpspreadsheet"
できました!!
Using version ^1.2 for phpoffice/phpspreadsheet ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 2 installs, 0 updates, 0 removals - Installing psr/simple-cache (1.0.1): Downloading (100%) - Installing phpoffice/phpspreadsheet (1.2.1): Downloading (100%) phpoffice/phpspreadsheet suggests installing mpdf/mpdf (Option for rendering PDF with PDF Writer) phpoffice/phpspreadsheet suggests installing dompdf/dompdf (Option for rendering PDF with PDF Writer) phpoffice/phpspreadsheet suggests installing tecnick.com/tcpdf (Option for rendering PDF with PDF Writer) phpoffice/phpspreadsheet suggests installing jpgraph/jpgraph (Option for rendering charts, or including charts with PDF or HTML Writers) Writing lock file Generating autoload files
※このあと公式ドキュメントを見てみたら必要なエクステンションがちゃんと書いてありました。
PHP version 5.6 or newer PHP extension php_zip enabled PHP extension php_xml enabled PHP extension php_gd2 enabled (if not compiled in)
3.おわりに
PhpSpreadsheetを使ってみましたが、複雑(細かい)なExcelを作るには向いてないみたいです。
例えば、
- 棒グラフと折れ線グラフの複合グラフが作れない。
- 複合グラフを作ってあるExcelファイルをテンプレートとし、それを読み込んで出力したら設定したフォントが解除され、凡例が空白になったりグラフポイントのサイズもバカデカくなったり見た目がぐちゃぐちゃに。(仕方なくブックオープン時にグラフを綺麗にするマクロを組み込みました)
- 数字をカンマ区切りで表示させることができない。(セルの書式設定)
- 配列からセルの設定をする $worksheet->fromArray で、セットする配列に空白があると勝手に詰められてしまう。例えば、[1,2, ,3]の配列をセルA1からセットすると、A1:1 B1:2 C1:空 D1:3 ではなく、A1:1 B1:2 C1:3 になる。
とかコード書いてみるといろいろ使いづらい点がでてきました。
今後のバージョンアップに期待!!