見出し画像

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=gdextension=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を開いて中身を確かめてみましょう。

hello_world.xlsx

A1セルに「Hello World!」と入力されています。

今回の解説は以上です。次回は実例を交えてPhpSpreadsheetの機能を紹介します。おつかれさまでした。

第2回はこちらです。

PHP/Laravelのシステム開発は株式会社パパグラムへぜひご相談ください。


この記事が気に入ったらサポートをしてみませんか?