PHPをインストールしExcelを操作する ~ PHP
PHPはwebサイトで使用されている言語で、ブログなどで使われているWordpressもPHPで開発されているそうです。
XAMPP Apache + MariaDB + PHP + Perlの統合環境を導入しても良いのですが、今回はインストールの使用容量も少ないPHPをインストールし、excelの操作まで行ってみます。75Mb程度です。
PHPのインストール
下記サイトより、NonThreadタイプのZipファイルをダウンロードします。
https://windows.php.net/download/
IISを使用する場合はNon-Threadタイプ、Apacheを使用する場合はThreadタイプを選ぶように書いてありますが、今回はWebプログラミングでないのでどちらでも構いませんが、Non-Threadタイプを選びます。32ビット64ビットがありますが、ぞれぞれのPCにより選択してください。
PHPプログラムのインストール
ダウンロードした「php-7.2.6-nts-Win32-VC15-x64.zip」を解凍しますが、次のフォルダを作って、そのフォルダに展開します。
D:\oss\PHP\PHP726
php-7.2.6のフォルダではうまく動かない場合があったので、そのようにしています。
別バージョンも管理できるようにこのようにしました。
VC++ランタイムのインストール
The VC15 builds require to have the Visual C++ Redistributable for Visual Studio 2017 x64 or x86 installed
となっているので、VS2017のランタイムが入っていない場合は下記サイトからダウンロードしてインストールします。
https://www.visualstudio.com/ja/downloads/?q=#other-ja
ダウンロードボタンのリンク先です。
https://aka.ms/vs/15/release/VC_redist.x64.exe
composerのインストール
excelライブラリを入れたいのですが、その前にPHPのライブラリの管理ツール「composer」をインストールしておきます。
手動でインストールする方法もありますが、Windows用に簡単にセットアップするツールがあるので、それを使用させてもらいます。
次の画面で「Composer-Setup.exe」をダウンロードします。
composerセットアップツールの実行
環境変数も変更してくれます。
phpspreadsheetのインストール
excelの操作ができるphpspreadsheetは下記サイトにありますが、composerでインストールします。
https://github.com/PHPOffice/PhpSpreadsheet
MSDOSプロンプトを管理者権限で開きます。
D:\oss\PHP\PHP726>composer require phpoffice/phpspreadsheet
実行しても無反応となった場合はPCを再起動して、同じコマンドをいれてください。
しかし、動いた場合でも下記のようなエラーが出た場合はphp.iniを編集するように書いてあります。
Your requirements could not be resolved to an installable set of packages. Problem 1 - phpoffice/phpspreadsheet 1.3.1 requires ext-gd * -> the requested PHP extension gd is missing from your system. - phpoffice/phpspreadsheet 1.3.1 requires ext-gd * -> the requested PHP extension gd is missing from your system. - phpoffice/phpspreadsheet 1.3.1 requires ext-gd * -> the requested PHP extension gd is missing from your system. - Installation request for phpoffice/phpspreadsheet 1.3.1 -> satisfiable by phpoffice/phpspreadsheet[1.3.1]. To enable extensions, verify that they are enabled in your .ini files: - D:\oss\PHP\PHP726\php.ini You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
d:\oss\PHP\PHP726\ext\php_gd2.dll があることを確認し
D:\oss\PHP\PHP726\php.iniの最後に次の行を追加します。
extension=php_gd2.dll
再度、下記コマンドをいれます。
D:\oss\PHP\PHP726>composer require 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.3.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
vendorフォルダが作成され、composerとphpofficeのフォルダ、autoload.phpができています。
hello world
helloworld.phpのプログラムを作成して、どこでもよいのですがファイルを保存します。
D:\oss\PHP\PHP726\workspace\helloworld.phpとしました
<?php echo "Hello World!";
下記のようにコマンドプロンプトで実行すると「Hello World!」が表示されました。
D:\oss\PHP\PHP726\workspace>php helloworld.php Hello World!
excelの入出力サンプル
A1セルに値をセットしexcelファイルに出力し、入力後A2セルに値をセットしてexcelとcsvに出力するサンプルです。
composerのautoload.phpでオートロードしてくれるので、2行目のautoloadを忘れずに入れてください。
入れないと下記のようなエラーがでます。
PHP Fatal error: Uncaught Error: Class 'PhpOffice\PhpSpreadsheet\Spreadsheet' not found in D:\oss\PHP\PHP726\workspace\test.php:11 Stack trace: #0 {main} thrown in D:\oss\PHP\PHP726\workspace\test.php on line 11
<?php require "d:/oss/php/php726/vendor/autoload.php"; use PhpOffice\PhpSpreadsheet\Settings; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader; use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxWriter; use PhpOffice\PhpSpreadsheet\Writer\CSV as CSVWriter; // Excel出力 $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $sheet->setCellValue('A1', 'A1'); $writer = new XlsxWriter($spreadsheet); $writer->save('test-1.xlsx'); // Excel読込 $reader = new XlsxReader(); $spreadsheet = $reader->load('test1.xlsx'); $sheet = $spreadsheet->getActiveSheet(); $sheet->setCellValue('A2', 'A2'); // Excel出力 $writer = new XlsxWriter($spreadsheet); $writer->save('test-2.xlsx'); // CSV出力 $sheet->setCellValue('A1', 'a1'); $sheet->setCellValue('B1', 'b1'); $sheet->setCellValue('A2', 'a2'); $sheet->setCellValue('B2', 'b2'); $writer = new CSVWriter($spreadsheet); $writer->save('test-2.csv');
csvを読みこみexcelテンプレートに出力するサンプル
よくあるcsvファイルを読み込んでexcelシートにセットして出力するサンプルです。
a1,b1,c1
a2,b2,c2
のようなCSVデータと何も入れていないxlsxファイルを用意してください。
前回作成したファイルを使って動かします。エラーの制御は入れていないので、業務で使用する場合は適宜変更してください。
<?php require "d:/oss/php/php726/vendor/autoload.php"; use PhpOffice\PhpSpreadsheet\Settings; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader; use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxWriter; use PhpOffice\PhpSpreadsheet\Writer\CSV as CSVWriter; // Excel読込 $reader = new XlsxReader(); $spreadsheet = $reader->load('test.xlsx'); // CSV読込 $line = 0; $fp = fopen( 'test.csv', 'r' ); while( $dataRow = fgetcsv( $fp ) ) { $line++; for($i = 0; $i < count( $dataRow ); ++$i ){ //列、行指定 $spreadsheet->getActiveSheet()->setCellValueByColumnAndRow( $i + 1, $line, $dataRow[$i] ); } } fclose( $fp ); // Excel出力 $writer = new XlsxWriter($spreadsheet); $writer->save('test0.xlsx');
ディスカッション
コメント一覧
まだ、コメントがありません