PhpSpreadsheetで数値、文字列、金額、日付、画像をシートに書き込むサンプル
せっかくなので昨日書いた記事のPhpSpreadsheet版も書いてみることにした。
PHPExcelからPhpSpreadsheetに乗り換えたいという人なんかほとんど居ないと思うけど、そういうひとにとっては参考になるかもしれない。
環境
- PHP 7.0.22
- PHPExcel 1.0.0-beta
以前の記事でPhpSpreadsheetを紹介したころは開発版しか公開されていなかったけど、現在はbetaリリースまで進んでいる模様。
composer.jsonはこんな感じ。
{ "require": { "phpoffice/phpspreadsheet": "1.0.0-beta" } }
ちなみにドキュメントがRead the Docsで公開されているあたりに今どきっぽさがある。
サンプルコード
サンプルで使用している画像はPHPExcelの記事同様PHPのロゴ。
<?php require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Cell; use PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Style\NumberFormat; use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxWriter; date_default_timezone_set('Asia/Tokyo'); // http://php.net/images/logos/php-med-trans.png $imagePath = 'php-med-trans.png'; // サンプルデータを適当に生成 $rows = array_map(function ($i) { return [ $i, // 数値 uniqid(), // 文字列 rand(10000, 100000), // 数値(金額) strftime('%Y-%m-%d', rand(0, time())), // 日付 ]; }, range(1, 20)); $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); // セルの書式を指定する時に必要 // http://phpspreadsheet.readthedocs.io/en/develop/topics/recipes/#write-a-date-or-time-into-a-cell Cell::setValueBinder(new AdvancedValueBinder()); $offset = 1; foreach ($rows as $i => $row) { $rowNum = $i + $offset; // A列からD列までの値を書き込み $sheet->fromArray($row, null, Cell::stringFromColumnIndex(0) . $rowNum); // C列の書式を金額(JPY)に変更 $sheet->getCell(Cell::stringFromColumnIndex(2) . $rowNum) ->getStyle() ->getNumberFormat() ->setFormatCode('"¥"#,##0'); // D列の書式をYYYY/MM/DD形式に変更 $sheet->getCell(Cell::stringFromColumnIndex(3) . $rowNum) ->getStyle() ->getNumberFormat() ->setFormatCode(NumberFormat::FORMAT_DATE_YYYYMMDDSLASH); (new Drawing()) ->setPath($imagePath) ->setWorksheet($sheet) ->setHeight(30) ->setCoordinates(Cell::stringFromColumnIndex(4) . $rowNum); // 行の高さを画像にあわせて変更 $sheet->getRowDimension($rowNum) ->setRowHeight(30); } // Excel(.xlsx)として書き出す $writer = new XlsxWriter($spreadsheet); $writer->save('sample.xlsx');
生成されるファイル
こんな雰囲気。Excelが手元にないのでLibreOfficeで表示。
まとめ
PHPExcelに比べてドキュメントが整っているのが良い。PHPExcelと見比べるとわかるけど、だいたいPHPExcelと同じインターフェースなので、移行しようと思ったらそれなりにできそうではある感じ。
名前空間がPSR-4準拠なので、そのあたりの書き味もPhpSpreadsheetの方が良い感じ。
最近Excelばかり触っているので、Excelの拡張機能も作ってみたくなってきた。
【購入特典付】Microsoft Office 365 Solo (1年版)|オンラインコード版|Win/Mac対応
- 出版社/メーカー: マイクロソフト
- 発売日: 2014/10/17
- メディア: Software Download
- この商品を含むブログ (6件) を見る