こんにちは。
弊社ではホームページの制作や保守・管理などのサービスを行っています。
その中で先日、PHPでExcelファイルの読み書きをともなう対応を行いました。
そこで「PhpSpreadsheet」を使ったので、今回はその使い方の一例として、テンプレートとなるExcelファイルをコピーして書き込みを行い、別名で保存する方法をご紹介したいと思います。
PhpSpreadsheetとは
PhpSpreadsheetはPHPのライブラリで、Excelなどの表計算ファイルを読み書きするための機能を提供しています。
PhpSpreadsheetのインストール
今回はMAMPで構築したローカル環境に「phpexcel」ディレクトリを用意して、そこにインストールします。
phpexcel %
「phpexcel」配下にPhpSpreadsheetをインストールするディレクトリとして「lib」を作成します。
phpexcel % mkdir lib
作成した「lib」ディレクトリに移動します。
phpexcel % cd lib
lib %
Composerを使ってPhpSpreadsheetをインストールします。
lib % composer require phpoffice/phpspreadsheet
Composerはそのプログラムで使われるライブラリを管理するためのツールです。
使うライブラリを指定するとそれらを一括インストールすることができます。
インストールが完了すると、「lib」配下に次のとおり「vendor」ディレクトリと「composer.json」、「composer.lock」ファイルが作成されます。
composer.jsonにはインストールしたライブラリ(PhpSpreadsheet)とそのバージョンが記載されています。
テンプレートファイルとPHPプログラムの作成
「phpexcel」配下にPhpSpreadsheetを使ったプログラムを書く「index.php」とExcelのテンプレートファイルとして「テンプレートファイル.xlsx」を作成します。
「テンプレートファイル.xlsx」は「A1」セルに次のとおりテキストを入力しておきます。
「index.php」の内容は次のとおりです。
<?php
// インストールしたものを読み込み
require 'lib/vendor/autoload.php';
// ファイル名
$temp_file = 'テンプレートファイル.xlsx';
$gen_file = '生成されたファイル.xlsx';
// 書き込み内容
$input_contents = array(
"A1" => "新しく生成されたファイル。",
"B2" => "ここはB2です。",
"C3" => "ここはC3です。",
"D4" => "ここはD4です。",
"E5" => "ここはE5です。",
"F6" => "ここはF6です。",
"G7" => "ここはG7です。",
);
// テンプレートファイルを読み込み
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($temp_file);
$worksheet = $spreadsheet->getActiveSheet();
// 書き込み
foreach ($input_contents as $cell => $content) {
$worksheet->getCell($cell)->setValue($content);
}
// 別名で保存
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save($gen_file);
テンプレートのExcelファイルを読み込んでテキストの上書きと書き込みを行い、それを別名で新規保存します。
PhpSpreadsheetを含んだPHPプログラムの実行
上記の「index.php」をブラウザアクセスで実行してみます。
エラーがあったときのことを考えると詳細を確認できるコマンド実行がおすすめです。
Excelファイルの確認
PhpSpreadsheetが正常終了すると、「phpexcel」配下に以下のとおり「生成されたファイル.xlsx」が作成されます。
「生成されたファイル.xlsx」には「index.php」で定義した$input_contentsの値が記載されています。
まとめ
以上が「PhpSpreadsheet」でテンプレートとなるExcelファイルをコピーして書き込みを行い、別名で保存する方法の一例です。
PhpSpreadsheetの公式サイトには、事例別に使い方のサンプルが多く記載されているので、そちらもご覧いただくのがおすすです。