PHP PHPExcel

PHPExcelでエクセルを出力してみる(その2)

前回の記事「PHPExcelでエクセルを出力してみる(その1)」で新しくエクセルを作成しましたので、今回はテンプレートを読み込んで値を書き込んで出力する方法を説明していきます。

テンプレート

今回はこちらのテンプレートを使用します。

こんな感じの枠を用意していますので、枠の中に1~9の数字を入れていきたいと思います。

phpexcel-2-1

テンプレートの読み込み

前回同様、PHPExcelをlibディレクトリに配置し、index.phpを作成しています。index.phpと同じ階層にtemplate.xlsxを置いています。

├── index.php
├── template.xlsx
└── lib
    ├── PHPExcel
    └── PHPExcel.php

ライブラリとテンプレートを読み込みます。

<?php

require_once(__DIR__ . "/lib/PHPExcel.php");
require_once(__DIR__ . "/lib/PHPExcel/IOFactory.php");

// テンプレートの読み込み
$reader = PHPExcel_IOFactory::createReader('Excel2007');
$excel = $reader->load(__DIR__ . '/template.xlsx');

値を書き込む

あとは前回同様、シートをアクティブにして、アクティブにしたシートを変数にいれて、シートに値を書き込んで行きます。下記ではシートに名前をつけていますが、つけなければテンプレートのシート名がそのまま使われます。

<?php

require_once(__DIR__ . "/lib/PHPExcel.php");
require_once(__DIR__ . "/lib/PHPExcel/IOFactory.php");

// テンプレートの読み込み
$reader = PHPExcel_IOFactory::createReader('Excel2007');
$excel = $reader->load(__DIR__ . '/template.xlsx');

// 0番目のシートをアクティブにします(シートは0から数えます)
$excel->setActiveSheetIndex(0);

// シートに対して何かを行うためにアクティブになっているシートを変数に入れます
$sheet = $excel->getActiveSheet();

// シートに名前を付けます
$sheet->setTitle("テスト");

// 1~9の数値を配列にします
$numbers = range(1, 9);

/*
foreachで値をセルに入れます
各セルを指定するための数値は下記にようになります
B2 = 1,2  B3 = 2,2  B4 = 3,2
C2 = 1,3  C3 = 2,3  C4 = 3,3
D2 = 1,4  D3 = 2,4  D4 = 3,4
*/
// 列用と行用の変数を用意します。
$col = 1; // 列は1から始まる ↑参照
$row = 2; // 行は2から始まる ↑参照
foreach ($numbers as $number) {
  $sheet->setCellValueByColumnAndRow($col, $row, $number);
  
  // 改行のタイミングで列を1に戻し、行を1増やします
  if ($number % 3 == 0) { // 3で割った余りが0、つまり3の倍数で改行します
    $col = 1;
    $row++;
  } else {
    $col++; // 改行のタイミングではない場合、列を1増やします
  }
}

エクセルの出力

前回同様、サーバーにエクセルを作成、もしくはブラウザからダウンロードして完了です。

// サーバーにエクセルを作成
$writer = PHPExcel_IOFactory::createWriter($excel, "Excel2007");
$writer->save("PHPExcel.xlsx");
exit;

または、

// ブラウザからダウンロード
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment;filename='PHPExcel.xlsx'");
header("Cache-Control: max-age=0");
 
$writer = PHPExcel_IOFactory::createWriter($excel, "Excel2007");
$writer->save("php://output");
exit;

最後に

細かい説明はコメントで書いてありますが、上記内容で不明点等あれば下記からコメントいただければお答えできると思います。

その1、その2でとりあえず出力の方法を説明してきましたが、シートの追加・複製や、セルの複製・書式設定等、もっと色々できるのでその辺りも次回以降説明していきます。

-PHP, PHPExcel