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

    [PowerShell]iTextSharpを使ってPDFファイルを結合する

    mougにあった質問「2つのPDFファイルを結合するには」の回答用に書…

  2. Office関連

    Office 2013をインストールしてみました。

    CNET Japanの記事「マイクロソフト、「Office 2013」…

  3. Office関連

    選択したセルに連続行番号を振るWordマクロ

    Wordでマニュアルを作成するとき等、表の中で連番を振りたいときがよく…

  4. Office関連

    [PowerPoint]シェイプの名前を指定して「変形」ができるようになりました。

    PowerPoint 2016で新しい画面切り替え効果「変形」が追加さ…

  5. Office関連

    Visio Onlineで図の作成・編集ができるようになりました。

    しばらくVisio Onlineを使っていなかったので気が付かなかった…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP