Office関連

PhpSpreadsheetを使ってPHPからExcelファイルを出力してみる。

一年半ほど前、「PHPWord」を使ってPHPからWordファイルを出力する方法について記事を書きました。

このPHPWordのExcel版である「PHPExcel」も使っていたのですが、最近PHPExcelの後継ライブラリ「PhpSpreadsheet」が出ているのを知ったので、さっそく試してみました。

PhpSpreadsheetのインストール

PhpSpreadsheetもPHPWordと同様にComposerを使ってインストールを行います。

composer.json
{
    "require": {
       "phpoffice/phpspreadsheet": "dev-develop"
    }
}

PhpSpreadsheetはまだ安定板がリリースされていないようなので、「dev-develop」を指定しています。

PhpSpreadsheetの呼び出し

インストールが終わったので、さっそくサンプルコードを実行してみます。
新規ワークブックを作成して、アクティブなシートのA1セルに「Hello World !」と入力するだけの、シンプルなコードです。

<?php
  require 'vendor/autoload.php';
  
  use PhpOffice\PhpSpreadsheet\Spreadsheet;
  use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  
  $spreadsheet = new Spreadsheet();
  $sheet = $spreadsheet->getActiveSheet();
  $sheet->setCellValue('A1', 'Hello World !');
  
  $writer = new Xlsx($spreadsheet);
  $writer->save('hello world.xlsx');

無事に下図のようなファイルが作成されました。

指定したExcelファイルを読み込むこともできます。

<?php
  require 'vendor/autoload.php';
  
  use PhpOffice\PhpSpreadsheet\Spreadsheet;
  use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;
  use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxWriter;
  
  $reader = new XlsxReader();
  $spreadsheet = $reader->load('template.xlsx'); //template.xlsx 読込
  $sheet = $spreadsheet->getSheetByName('weather'); //weatherシート取得
  $sheet->setCellValue('C2', '東京');
  $sheet->setCellValue('C3', '晴れ');
  
  $writer = new XlsxWriter($spreadsheet);
  $writer->save('weather.xlsx');

上記コードを実行すると、「template.xlsx」ファイルが読み込まれ、weatherシートのC2、C3セルに文字列が書き込まれます。

下記のようにHTTPヘッダを指定しておけば、ファイルをダウンロードさせることもできます。

<?php
  require 'vendor/autoload.php';
  
  use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;
  use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxWriter;
  
  $reader = new XlsxReader();
  $spreadsheet = $reader->load('template.xlsx'); //template.xlsx 読込
  $sheet = $spreadsheet->getSheetByName('weather'); //weatherシート取得
  $sheet->setCellValue('C2', '東京');
  $sheet->setCellValue('C3', '晴れ');
  
  //ダウンロード用
  //MIMEタイプ:https://technet.microsoft.com/ja-jp/ee309278.aspx
  header("Content-Description: File Transfer");
  header('Content-Disposition: attachment; filename="weather.xlsx"');
  header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  header('Content-Transfer-Encoding: binary');
  header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  header('Expires: 0');
  ob_end_clean(); //バッファ消去
  
  $writer = new XlsxWriter($spreadsheet);
  $writer->save('php://output');

詳しい使い方に関してはドキュメントが用意されているので、こちらをご参照ください。
(PHPExcelからの移行についても「migration from PHPExcel」に詳しく記載されています。)

GitHubに下記記載があるように、今後PHPExcelの開発は行われませんので、これからはPhpSpreadsheetを使って、Excelファイル出力機能を実装した方が良さそうです。
(と言いつつも、現時点(2017/10)ではPhpSpreadsheetの安定板がリリースされていないので、dev版を組み込んで良いかどうかという話はありますが…)

PhpSpreadsheet is the next version of PHPExcel. It breaks compatibility to dramatically improve the code base quality (namespaces, PSR compliance, use of latest PHP language features, etc.).

Because all efforts have shifted to PhpSpreadsheet, PHPExcel will no longer be maintained. All contributions for PHPExcel, patches and new features, should target PhpSpreadsheet develop branch.

https://github.com/PHPOffice/PhpSpreadsheet より

office-toolboxを使って簡単にOffice アドインを作成する方法前のページ

名前付きセル(範囲)にコメントを付けるVBAマクロ次のページ

関連記事

  1. Office関連

    ランダムな文字列を生成するVBAマクロ

    文字数を指定して0-9,A-Zまでのランダムな文字列を生成するマクロで…

  2. Office関連

    マクロでリボンを最小化する。

    mougの回答用に書いたコードです。忘れないうちにメモ。・…

  3. Office関連

    VALUE DOMAINで管理しているドメインをOffice 365で使用する。

    Office 365をセットアップすると設定される初期ドメイン「onm…

  4. Office関連

    [Office]「タッチ」タブの正体!?

    最近下記のようにOfficeのリボンにある「タッチ」タブについての質問…

  5. Office関連

    「最速攻略 Wordマクロ/VBA徹底入門」レビュー

    いつもお世話になっているExcel MVPの伊藤さんに9月20日発売予…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

Translate

Chinese (Simplified)Chinese (Traditional)EnglishFrenchGermanJapaneseKoreanRussianSpanish

最近の記事

アーカイブ

PAGE TOP