PHPでエクセル操作を自動化する①
今回と次回は「PhpSpreadsheet」というライブラリを使ってエクセルを操作してみたいと思います。ライブラリのインストールにComposerを使用しますので、インストールがまだの方は下記の記事を参考にインストールを済ませてください。
なおライブラリが対象とするエクセルのバージョンは2007以降、PHPのバージョンは8.0以上です。
Windows編
Mac編
筆者の開発環境
PC:DELL Inspiron 15 3511
OS:Windows 11 Home バージョン22H2
PHP:8.0.1
Office:Microsoft Office Home and Business 2021
公式サイト
事前準備
MAMPのphpコマンドにパスを通してComposerをインストールした場合、PhpSpreadsheetのインストールでエラーが出る可能性があります。
php.iniを編集します。エクスプローラーから下記のパスに移動し、php.iniをバックアップしてください。(コピー&ペーストでOKです。)「8.0.1」はPHPのバージョンですので、お使いのバージョンに合わせて読み替えてください。
C:\MAMP\bin\php\php8.0.1
php.iniをお使いのエディターで開いてください。下記の2行を探して、先頭のセミコロンを削除して、コメントアウトを解除してください。
;extension=fileinfo
;extension=gd
↓
extension=fileinfo
extension=gd
編集できたら、保存してphp.iniを閉じてください。
PhpSpreadsheetのインストール
コマンドプロンプトを起動し、下記のコマンドを実行してください。MAMPのデフォルトのドキュメントルートに移動します。
cd C:\MAMP\htdocs
下記のコマンドを実行し、作業フォルダを作成してください。
mkdir office
下記のコマンドを実行し、カレントディレクトリを上記のフォルダに変更してください。
cd office
下記のコマンドを実行し、新しくcomposer.jsonを作成してください。
type nul > composer.json
お使いのエディタでcomposer.jsonを開き、下記のように編集してください。
{
"require": {
"phpoffice/phpspreadsheet": "^1.29"
},
"config": {
"platform": {
"php": "8.0"
}
}
}
編集出来たら、保存して下記のコマンドを実行してください。
composer install
下記のようにメッセージが表示されたらインストール完了です。
No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information.
Loading composer repositories with package information
Info from https://repo.packagist.org: #StandWithUkraine
Updating dependencies
Lock file operations: 10 installs, 0 updates, 0 removals
- Locking ezyang/htmlpurifier (v4.16.0)
- Locking maennchen/zipstream-php (2.4.0)
- Locking markbaker/complex (3.0.2)
- Locking markbaker/matrix (3.0.1)
- Locking myclabs/php-enum (1.8.4)
- Locking phpoffice/phpspreadsheet (1.29.0)
- Locking psr/http-client (1.0.3)
- Locking psr/http-factory (1.0.2)
- Locking psr/http-message (1.1)
- Locking psr/simple-cache (3.0.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 10 installs, 0 updates, 0 removals
- Downloading myclabs/php-enum (1.8.4)
- Downloading psr/simple-cache (3.0.0)
- Downloading psr/http-message (1.1)
- Downloading psr/http-factory (1.0.2)
- Downloading psr/http-client (1.0.3)
- Downloading markbaker/matrix (3.0.1)
- Downloading markbaker/complex (3.0.2)
- Downloading maennchen/zipstream-php (2.4.0)
- Downloading ezyang/htmlpurifier (v4.16.0)
- Downloading phpoffice/phpspreadsheet (1.29.0)
- Installing myclabs/php-enum (1.8.4): Extracting archive
- Installing psr/simple-cache (3.0.0): Extracting archive
- Installing psr/http-message (1.1): Extracting archive
- Installing psr/http-factory (1.0.2): Extracting archive
- Installing psr/http-client (1.0.3): Extracting archive
- Installing markbaker/matrix (3.0.1): Extracting archive
- Installing markbaker/complex (3.0.2): Extracting archive
- Installing maennchen/zipstream-php (2.4.0): Extracting archive
- Installing ezyang/htmlpurifier (v4.16.0): Extracting archive
- Installing phpoffice/phpspreadsheet (1.29.0): Extracting archive
7 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
2 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
念のため、composer.lockファイルとvendorフォルダが作られていることを確認しましょう。下記のコマンドを実行してください。
dir
下記のように表示されれば成功です。
c:\MAMP\htdocs\office のディレクトリ
2023/10/08 18:17 <DIR> .
2023/10/08 17:15 <DIR> ..
2023/10/08 18:07 159 composer.json
2023/10/08 18:17 23,466 composer.lock
2023/10/08 18:17 <DIR> vendor
サンプルコードの実行
公式サイトに掲載されているサンプルコードを実行してみましょう。
PHPファイルを作成します。下記のコマンドを実行してください。
type nul > excel.php
お使いのエディターで上記のファイルを開いてください。下記のように編集してください。
<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$activeWorksheet = $spreadsheet->getActiveSheet();
$activeWorksheet->setCellValue('A1', 'Hello World !');
$writer = new Xlsx($spreadsheet);
$writer->save('hello_world.xlsx');
編集出来たら、保存して下記のコマンドを実行してください。
php excel.php
officeフォルダ内に「hello_world.xlsx」というファイルができていたら成功です。下記のコマンドで確かめてみましょう。
dir | find "excel.php"
下記のように表示されます。
2023/10/08 19:12 345 excel.php
エクセルをお持ちの方はexcel.phpを開いて中身を確かめてみましょう。
A1セルに「Hello World!」と入力されています。
今回の解説は以上です。次回は実例を交えてPhpSpreadsheetの機能を紹介します。おつかれさまでした。
第2回はこちらです。
PHP/Laravelのシステム開発は株式会社パパグラムへぜひご相談ください。
この記事が気に入ったらサポートをしてみませんか?