PHP入門 その8

前回でExcel操作の基本を学びました。

これでExcelファイルの作成が出来るようになりました。

 

しかし、ここで問題があります。

それは、複数のファイルを作成しようと思ったらいちいちプログラムを書き換えなくてはいけないことです。

まったく違う種類のファイルを作成するのであれば、特に問題はないのですが、

同じ種類で、顧客が違うなどセルの値が違う場合にプログラムをいちいち書き換えていたら面倒です。

そんなことをするくらいなら直接作ったほうが早いです。

 

そんな問題を解決するために前回までに学んだDBが活躍します。

必要な情報をDBに登録しておき、Excelファイル作成時に検索し、セルに挿入することで

同じ書式でデータの違うExcelファイルをプログラムの修正なく作ることが出来ます。

 

今回は今まで学んだDBとExcel操作を組み合わせて使ってみたいと思います。

今回も前回と同じテーブルを使います。

テーブル設定

今回はテンプレートファイルを用意します。

template.xlsx

 

このプログラムでは何も難しいことはしていません。今まで学んだことを組み合わせているだけです。

<?php
set_include_path(get_include_path().PATH_SEPARATOR.$_SERVER["DOCUMENT_ROOT"]."/Classes/");
include_once 'PHPExcel.php';
include_once 'PHPExcel/IOFactory.php';

//Excel2007形式の読み込み準備
$reader = PHPExcel_IOFactory::createReader('Excel2007');
//テンプレート読み込み
$book = $reader -> load("template.xlsx");

//1番目のシート準備
$book -> setActiveSheetIndex(0);
$sheet = $book -> getActiveSheet();

//DB接続
$connect = new mysqli("localhost", "user", "password");
//全レコード検索
$sql = "select * from userData";
$writer = PHPExcel_IOFactory::createWriter($book, 'Excel2007');

if($result = $connect -> query($sql)){
	$i=1;
       //検索結果分ファイル作成
	while($data = $result-> fetch_assoc()){
		$sheet -> setCellValue("C3", $data["id"]);
		$sheet -> setCellValue("C4", $data["name"]);
		$sheet -> setCellValue("C5", $data["birth"]);

		$writer -> save("user_data".$i++.".xlsx");
	}
	$result -> close();
}
$connect -> close();
?>
user_data1.xlsx
user_data2.xlsx
user_data3.xlsx
user_data4.xlsx

このプログラムでは、テンプレートファイルを読み込み、DBから検索してきたレコード毎にExcelファイルを作成しています。

user_data1.xlsx user_data2.xlsx

user_data3..xlsx user_data4.xlsx

 

テンプレートファイルとDBを組み合わせることで、面倒な書式設定とセルのデータ入力を自動化することが出来ます。