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]ユーザーフォームでBootstrapを使う。

    MSDNフォーラムにあった質問「VBAでのフォーム オブジェクトを立体…

  2. Office関連

    オフィス祭り 2018 in 東京が9月15日(土)に開催されます。

    突然ですが、私はMicrosoft Officeが大好きです。20…

  3. Office関連

    VBAプロジェクトを「展開する」VBAマクロ

    MSDNフォーラムに面白い質問がありました。VBE・プロジェクト …

  4. Office関連

    [Excel 2013]Web関数を使ってマッシュアップ

    以前書いた記事「Excel 2013で追加された「WEBSERVICE…

  5. Office アドイン

    [Office用アプリ]仕事の息抜きにピッタリ「もぐらミニ」

    KumaP氏作の作業ウィンドウアプリ「もぐらミニ」がOffice スト…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP