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

    MDB(Accessデータベース)ファイルを作成してデータを格納するExcelマクロ

    2012/2/22追記:下記で作成したMDBファイルを利用したWo…

  2. Office関連

    SmartArtからテキストを取得するPowerPointマクロ

    Twitterで@terrysaitoさんが下記のようなツイートをされ…

  3. Office関連

    Gmail APIを使ってメール送信するVBAマクロ(3)

    前回、前々回とGmail APIを扱ってきましたが、今回は前々回の記事…

  4. Office アドイン

    [Office用アプリ]Excel 2013の操作を動画で学べるアプリ「Excel video tu…

    Excel 2013の操作を動画で学べるアプリがMicrosoftから…

  5. Office関連

    CDOを使ってGmail送信を行うVBAマクロ(UTF-8対応版)

    2年ほど前にCDOを使ってGmail送信を行うVBAマクロについて記事…

  6. Office関連

    セル内にあるブックマークをカウントするWordマクロ

    Twitterを眺めていたら下記ツイートを発見しました。【Wo…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP