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関連

    目次を更新するWordマクロ

    文書の目次を更新するにはTableOfContentsオブジェクトのU…

  2. Office関連

    徹底的にSymbol(シンボル)フォントをチェックするWordマクロ

    文字列をメモ帳にコピー&ペーストすると文字化けしたり、フォント指定で検…

  3. Office関連

    [PowerPoint]Applicationオブジェクトのイベントを利用する

    PowerPointのApplicationオブジェクトには、スライド…

  4. Office関連

    Wikipediaの検索予測キーワードの一覧を取得するVBAマクロ

    Wikipediaのサーチボックスにキーワードを入力すると、入力したキ…

  5. Office関連

    [Excel Services ECMAScript]アクティブセルが変更されたときのイベントを利用…

    埋め込んだExcelワークブックの、アクティブセルが変更されたときのイ…

  6. アイコン一覧

    Office 365アイコン(imageMso)一覧(T)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

Translate

Chinese (Simplified)Chinese (Traditional)EnglishFrenchGermanJapaneseKoreanRussianSpanish

最近の記事

アーカイブ

PAGE TOP