「PHPExcelって何のこと?」
このような疑問があるかと思いますが、確かに現在はあまり見慣れない単語です。ひと昔前まではPHPでExcel操作をする場合、「PHPExcel」を使用していました。
PHPExcelはPHPのライブラリなのですが、現在は更新されておらずPhpSpreadsheetの使用が推奨されています。そこで今回はPHPExcelについて少しご紹介した後、「PhpSpreadsheet」の使い方についてご紹介していきたいと思います。
目次
PHPExcelとは何のこと?
『PHPExcel』とはPHPでExcelに出力したりファイル加工をこなうためのライブラリのこと。
Excel95、Excel2007等のエクセルファイルを読み書きすることができるピュアPHPのライブラリで、WindowsやExcelが必要ないため、Linux環境だけで完結するのが特徴と言えます。
実現可能なこととして、以下の内容が挙げられます。
Excelファイル操作
Excelファイルを新規生成して、カスタマイズして出力することができる機能です。また、あらかじめ用意されたテンプレートファイルを読み込み、カスタマイズして出力することが可能です。
PDFファイル操作
PHPExcelを使うことで、PDFファイルの操作ができるようになります。カスタマイズした内容を、PDFファイルとして出力が可能です。
CSVファイル操作
CSVファイルの操作も行うことができ、カスタマイズした内容をCSVファイルとして出力します。
普段はあまり「CSVファイル」を使用する機会がないかもしれませんが、CSV(Comma Separated Value)はデータをカンマ(,)で区切った値のことで、アプリケーション間でデータをやり取りする際に使われます。
PHPによるCSVファイルの読み込み手順を解説HTMLファイル操作
HTMLファイルの操作も行うことができ、カスタマイズした内容をHTMLファイルとして出力させることが可能です。
【業務効率化】エクセル×プログラミングで出来ること3選PhpSpreadsheetの使い方
それでは「PhpSpreadsheet」の使い方についてご紹介していきます。PHPExcelは開発が終了しているため、Excelファイルの出力を行う場合は「PhpSpreadsheet」を使うようにしましょう。
インストール方法
まずはcomposerでPhpSpreadsheetのインストールを行ないましょう。そのためのコードは以下の通りです。
1 |
$ composer require phpoffice/phpspreadsheet |
「composer」が何かわからない、という方に大まかに解説すると、PHPのパッケージ依存管理ツールの名前となります。
composerはコマンドで操作をし、インストールやアップデートなどはコマンドプロンプトやターミナルなどで行います。composerのインストールが終わっていない場合は、まず公式サイトよりインストーラをダウンロードしてみましょう。
インストールができたら、PhpSpreadsheetを使用できるようにします。下記のコードで使用できるようになります。
1 2 3 4 5 6 7 8 9 10 11 |
require 'vendor/autoload.php'; // Spreadsheet use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Reader\Xls as XlsReader; use PhpOffice\PhpSpreadsheet\Reader\Xlsx as Reader; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use PhpOffice\PhpSpreadsheet\Style\NumberFormat; use PhpOffice\PhpSpreadsheet\Style\Border; use PhpOffice\PhpSpreadsheet\Style\Alignment; use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; |
Excelの書き出し方法
Excelを書き出すためには、例として下記のコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
// スプレッドシートの作成 $spreadsheet = new Spreadsheet(); // ファイルのプロパティを設定 $spreadsheet->getProperties() ->setTitle("タイトル"); // シート作成 $spreadsheet->getActiveSheet('sheet1')->UnFreezePane(); $sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle("シートタイトル"); // 値を設定 $sheet->setCellValue('A1', 'ウェブカツ'); $sheet->setCellValue('B1', 'PhpSpreadsheet'); $sheet->setCellValue('C1', 'ブログ'); // テキストの中央寄せ $sheet->getStyle('A1:B1')->applyFromArray(['alignment'=>['horizontal'=>Alignment::HORIZONTAL_CENTER]]); // 枠線を設定 $sheet->getStyle('B1')->getBorders()->getOutline()->setBorderStyle(Border::BORDER_THIN); // 列の横幅を設定 $sheet->getColumnDimension('B')->setWidth(8); // セルを連結 $sheet->mergeCells('C1:D1'); // テキストの縦寄せ $sheet->getStyle('C1:D1')->getAlignment()->setVertical(Alignment::VERTICAL_TOP); // テキストの折り返しを設定 $sheet->getStyle('C1')->getAlignment()->setWrapText(true); // 配列の形で値を設定 $dataList = [ ['Happy Bingo!'], ['B', 'I', 'N', 'G', 'O'], [26, 15, 18, 17, 13], ['6', '11', 2, 5, '14'], [1, 8, NULL, 4, 19], [21, 27, 3, 20, 24], [16, 22, 23, 25, 12], ]; $sheet->fromArray($dataList, NULL, 'C6', true); // バッファをクリア ob_end_clean(); $fileName = "sample.xlsx"; // ダウンロード header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="'.$fileName.'"'); header('Cache-Control: max-age=0'); header('Cache-Control: max-age=1'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); header('Cache-Control: cache, must-revalidate'); header('Pragma: public'); $writer = new Xlsx($spreadsheet); $writer->save('php://output'); exit(); |
ブラウザからアクセスすると、Excelのダウンロードができるようになります。
セルの指定方法
書き出すセルを指定する場合、セルの数値を入力する必要があります。例えばA列の3行目であれば「A1」、C列の10行目であれば「C10」などです。
しかしプログラムを記述し出力する場合に、英字を使用したくない場面も出てくると思います。そのような場面で使用できる命令文が、次の通り。
1 2 3 4 5 |
// セルを縦横の数値で指定する(列番号, 行番号, 値) $sheet->setCellValueByColumnAndRow(5, 3, '数値でセルを指定'); // セルのスタイルを縦横の数値で指定する $sheet->getStyleByColumnAndRow(5, 3)->getBorders()->getOutline()->setBorderStyle(Border::BORDER_THIN); |
列番号を数字で示すことで、指定可能です。
Excelの読み込み
サーバー上にあるExcelファイルやアップロード済みのExcelファイルは、下記のような記述で読み込み可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Excelファイルを指定 $filePath = "reader.xlsx"; // Excelファイルを読み込む $reader = new XlsReader(); // $reader = new Reader(); $spreadsheet = $reader->load($filePath); // シート取得 $sheet = $spreadsheet->getActiveSheet(); // 値を取得 $cellValue = $sheet->getCell("A1")->getCalculatedValue(); // $cellValue = $sheet->getCell("A1")->getValue(); // $cellValue = $sheet->getCell("A1")->getOldCalculatedValue(); |
まとめ
いかがでしたか?
今回の記事では、「PHPのExcel出力」について、PhpSpreadsheetの使い方をご紹介しました。
PhpSpreadsheetを使用するためには、PHP ライブラリの「Composer」を導入しておく必要があります。今後PHPで開発を進める上でComposerの導入は必須とも言えますので、まだ導入していない方は導入しましょう。