論文

PHPExcel による Excel ファイル作成
岩田員典 （愛知大学経営学部）

要旨
本学で開講している情報リテラシー入門・応用では，Word や Excel の自動採点システムを独自に構築・運用している。本システムでは Excel の採点に PHP のライブラリである PHPExcelを 使 用 し て い る。PHPExcel を 利 用 す る と PHP に よ っ て Excel フ ァ イ ル の 読 み 込 み や， 新 規
Excel ファイルの作成が可能になる。本システムでは採点には Excel ファイルを読み込む機能だけを利用している。それに加えて問題作成の労力を軽減するために，模範解答から解答欄を空欄にした問題を作成する機能も実装している。その際に問題ファイルにたいして，編集されては困るデータ部分は編集できないように一部のセルにロックを掛けている。前稿ではPHPExcel による Excel ファイルの読み込み方法についてのみ言及したので，本稿ではこれらセルへのロックなども行った Excel ファイル作成について説明する。

キーワード：Excel 自動採点，PHPExcel，Excel ファイル作成，情報リテラシー，PHP

1．はじめにファイルでは，学生がデータ部分を編集

本学の情報リテラシー入門・応用では，できないように一部のセルにロックをか学生が Word や Excel の多数の問題に取けている。そこで本稿ではこれらの機能り組めるように，自動採点システムを独を PHPExcel を用いてどのように実現す自に構築・運用している 1）。本システム

るかについて説明する。の Excel の採点には，Office 2007 以降はファイル形式が Office Open XML 2）に変

2．PHP とは更されたため，PHP のライブラリである3）

正 式 な 名 称 は PHP: Hypertext

PHPExcel を用いている。そのため，前Preprocessor 5）であり，通常 PHP と省略

稿 4） では採点時に必要となる PHPExcel

される。PHP の部分は“Personal Homeを利用した Excel ファイルの読み込みにPage”に由来していると言われている。

ついて解説をした。しかし，採点システ

PHP は 動 的 に HTML デ ー タ を 生 成 す る

ムではファイルを読み込むだけではな

こ と に よ っ て， 動 的 な Web ペ ー ジ を 実

く，模範解答例から問題を作成する機能現することを主な目的としている。PHPも実装している。その際に作成した問題といった場合にはプログラミング言語か

愛知大学情報メディアセンター

－1－

Vol.28, No.1, 2018

そ の 言 語 プ ロ セ ッ サ を 指 す。PHP は ス◦ x86 Thread Safe

クリプト言語であり，サーバサイドで動Zip作するアプリケーションの開発に用いら

Debug Packれる。通常は，Web サーバ上で動作し，◦ x64 Non Thread Safe

サ ー バ 上 で PHP ス ク リ プ ト の 文 書 が 閲

Zip覧要求されるたびに，そのスクリプトがDebug Pack実行される。そして，その結果をウェブ◦ x64 Thread Safe

ブラウザに対して送信することで動的なZipWeb ページを実現している。C 言語に似Debug Pack

た平易な文法のため幅広く用いられていx86 か x64 か は OS と CPU の ビ ッ ト 数る。また，本稿で取り上げる PHPExcel（32bit もしくは 64bit）にあわせて選択すのような多くのフレームワークやライブる。そして，Non Thread Safe か Thread

ラ リ が 存 在 し， 様 々 な Web ア プ リ ケ ー

Safe か は Web サ ー バ の 種 類 と Versionションの開発が容易である。に よ る。Apache2 以 降 な ら ば Thread

尚，本稿執筆時において，PHP の最新Safe を 利 用 し，IIS や Apache1 な ら ばの バ ー ジ ョ ン は 7.1.9 で あ る が， サ ン プ

Non Thread Safe を 利 用 す る。 ま た，

ルコードの動作確認は開発環境の関係でDebug Pack はデバッグ用のプログラム

7.1.7 で行っている。

データベース含んだものである。これは統合開発環境でデバッグをする場合のみ

2.1

PHP のインストール必要となる。したがって，本稿で説明す

PHPExcel を利用するには，PHP をイる PHPExcel を利用するだけならビット（bit）数があっている zip ファイルさえ有ンストールする必要がある。

ればよい。
2.2.1

Windows へのインストール

ダウンロードした zip ファイルを好み6）の場所に展開する。展開したフォルダにで 示 し た URL か ら ダ ウ ン ロ ー ド す る こ

存在する php.exe をコマンドプロンプトとが出来る。このサイトには zip ファイ等で実行できれば，そこにパスを通すこルが 8 種類存在する。そこから環境と用とでインストールは完了する。尚，環境途に適切な物をダウンロードする。

によっては実行に「Visual Studio 2012

Window 版のバイナリは，参考文献◦ x86 Non Thread Safe

更 新 プ ロ グ ラ ム 4 の Visual C++ 再 頒 布Zip可能パッケージ」などのライブラリが必Debug Pack

要となることがある。

愛知大学情報メディアセンター

－2－Vol.28, No.1, 2018

図1

2.1.2

PHPExcel のページ

その他の OS へのインストール

Mac OS X 10.0.0 以 降 で は，PHP は標準でインストールされている。そのため，新しいバージョンを利用するのでなければターミナルなどからすぐに利用することが出来る。2017 年 9 月の時点ではmacOS v10.13（High Sierra）には PHP
図27.1.7 がインストールされている。

PHPExcel のダウンロードその他の Unix システムでは，OS 毎のパッケージマネージャーを利用するかソースファイルをダウンロードしてイン3．PHPExcel の利用方法ストールすることになる。詳細は参考文

3.1

PHPExcel のインストール

献 5） の Documentation に書かれている。

PHPExcel は参考文献 3） に示した URL

また，サーバサイドで利用する場合ににアクセスしダウンロードする（図 1）。

は Apache 等 の Web サ ー バ の 設 定 も 必

こ の サ イ ト で Clone or download を ク要であり，その際には同じく参考文献 5）リックし，Download ZIP を選択するこに設定方法が記載されている。とで取得できる（図 2）。本稿執筆時には愛知大学情報メディアセンター－3－

Vol.28, No.1, 2018

1.8.1（2015/4/30 リリース）が最新版でクトリで作業を行う（図 3）。

ある。
ダウンロードしたファイルは zip で圧

3.2Excel ファイルの書き出し

縮 さ れ て い る た め 展 開 す る。 展 開 す る

本節では Excel ファイルをさまざまなと，Classes, Documentation, Examples

設定で書き出すためのコードについて説の 3 つ の デ ィ レ ク ト リ と，changelog.

明をする。全てのコードを一カ所に記載

txt, composer.json, install.txt, license.

すると長いため分割して説明する。尚，

md の 4 つ の フ ァ イ ル が 作 成 さ れ る。

PHP のコードは全てタグ“<?php”，”?>”

PHPExcel の 実 行 に 必 要 な フ ァ イ ル はに囲まれているものとする。

Classes 内のファイルのだけである。そこで，コードを作成するディレクトリに3.2.1

Classes ディレクトリを移動する。ここで は，testPHPExcel と 名 付 け た デ ィ レ

書き出しの準備

図 4 に Excel フ ァ イ ル を 書 き 出 す た めの基本的な設定を示す。
1 行目はライブラリを読み込むためのパスの設定を行う。Web アプリケーションとしてサーバサイドで利用する場合も，同様の設定を利用する。
2 行 目 は Time Zone の 設 定 で あ り，PHP の設定状況によっては必要ない。
3～4 行目が利用するライブラリの読み込みとなる。1 行目で設定したパスに対しての相対的な参照となる。

図3

PHPExcel のインストール

5 行 目 で Excel フ ァ イ ル を 作 成 す る た

1. set_include_path(get_include_path() . PATH_SEPARATOR . './Classes/');2. date_default_timezone_set('Asia/Tokyo');
3. include_once("PHPExcel.php");
4. include_once("PHPExcel/IOFactory.php");
5. $objPHPExcel = new PHPExcel();
6. $objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setName(' ＭＳ ゴシック ');7. $objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(11);図4
愛知大学情報メディアセンター

ファイル書き出しの基本設定－4－

Vol.28, No.1, 2018

めのオブジェクトのインスタンスを新規3.2.2作成している。

ファイルプロパティの設定

Excel フ ァ イ ル の プ ロ パ テ ィ は 図 5 の

6 行 目，7 行 目 で は， 使 用 す る フ ォ ン

コードにより設定できる。

トの種類とフォントサイズを指定している。

8 行目でプロパティ内のタイトルを設定している。9 行目では件名を指定して8. $objPHPExcel->getProperties()->setTitle("Excel ファイルの作成 ");9. $objPHPExcel->getProperties()->setSubject("PHPExcel Programming");
10. $objPHPExcel->getProperties()->setCreator(" 岩田員典 ");11. $objPHPExcel->getProperties()->setManager(" 岩田員典 ");12. $objPHPExcel->getProperties()->setCompany(" 愛知大学 ");13. $objPHPExcel->getProperties()->setCategory("PHPExcel");
14. $objPHPExcel->getProperties()->setKeywords("PHPExcel, Writer");
15. $objPHPExcel->getProperties()->setDescription("PHPExcel で作成 ");図5

図6
愛知大学情報メディアセンター

ファイルプロパティの設定

ファイルプロパティの設定結果－5－

Vol.28, No.1, 2018

いる。

シートを追加する場合や，ファイルを10～12 行目ではそれぞれ作成者，管理者，会社名を設定している。13 行目で分開いたときに表示されるシートの指定については後述する。

類を指定している。また 14 行目・15 行目のようにキーワードとコメントを記入す3.2.4

ることもできる。

セルへのデータ入力

セルに値を設定するには，setCellValue

このコードによるプロパティの設定結果を図 6 に示す。

メソッドを利用する。第 1 引数にセル番号を 'A1' のように指定する。そして，第2 引数でそのセルに入力する値を指定す

3.2.3

シートの設定る。例えば A2 セルに 2 を入力したければ

図 7 では編集対象となるシートを，どsetCellValue（'A2'，'2'）; と 記 述 す る。のように指定するかについて記述していまた，第 2 引数には関数による計算を指る。16 行目でデータを書き込みたいシー定することもできる。

トを指定している。シートの番号は先頭

図 8 のコードを実行すると，A1 には文から 0，1，2，…となる。17 行目でその字列が入力される。そして，A2 から A4シートを編集対象として取り出していまでのセルに数値が入り，その和を求める。そして，18 行目でシート名を設定しる式が A5 に入力される。ている。

16. $objPHPExcel->setActiveSheetIndex(0);17. $sheet = $objPHPExcel->getActiveSheet();18. $sheet->setTitle(" 書き込みテスト ");図7

編集対象のシート指定とシート名の設定

19. $sheet->setCellValue('A1', 'PHPExcel');
20. $sheet->setCellValue('A2', '2');
21. $sheet->setCellValue('A3', '3');
22. $sheet->setCellValue('A4', '4');
23. $sheet->setCellValue('A5', '=sum(A2:A4)');

図8
愛知大学情報メディアセンター

セルの値の設定－6－

Vol.28, No.1, 2018

3.2.5

一部のセルの保護列の追加と削除を禁止するための命令で授業では入力済みのデータに対して計ある。行と列の削除に関しては，保護さ算 を 行 う よ う に 指 示 し て い る。 そ の たれたセルがある場合には実行できないた

め，それらのデータを編集されてしまう

め，ここでは必須というわけではない。と正しく採点できないという問題がおき

30 行目はコードが長いため紙面の都合る。そこで，問題ファイルの解答を入力上改行しているが，本来は一行で記述すするセル以外は編集できないように保護る。セル A2 の保護を解除している。こしている。本節では，このようにセルのの命令を実行することで，セル A2 だけ編集を制限する方法について説明する。

編集可能になる。

セルを保護するための基本的な方針は以下のような手順になる。

3.2.6

1．シート全体を保護する。

セルのスタイル設定

各セルのスタイルも設定することがで

2．編 集 可 能 に す る セ ル を 個 別 に 指 定する。

きる（図 10）。背景色を設定する場合には
31 行目・32 行目のように，getFill() で対

24 行 目 の 命 令 で， 現 在 編 集 中 の シ ー

象となるインスタンスを取り出してからト 全 体 を 保 護 す る こ と に な る（16 行 目設定する。それ以外のフォントの種類，の setActiveSheetIndex(0) で 指 定 し た

サ イ ズ， 文 字 の 色 な ど は getFont() に よシート）。そして，25 行目で保護のためり取得したインスタンスに対して各種値のパスワードを設定している。このパスを設定する。図 10 のコードでは以下の設

ワードを入力すれば，保護されているセ定を行っている。

ルも編集可能になる。

33 行目：フォントの種類

26 行目から 29 行目では，それぞれ行と34 行目：太字にするかどうか

24. $sheet->getProtection()->setSheet(TRUE);
25. $sheet ->getProtection()->setPassword("Password");26. $sheet ->getProtection()->setProtection()->setInsertRows(TRUE);
27. $sheet ->getProtection()->setProtection()->setDeleteRows(TRUE);
28. $sheet ->getProtection()->setProtection()->setInsertColumns(TRUE);
29. $sheet ->getProtection()->setProtection()->setDeleteColumns(TRUE);
30. $sheet->getStyle("A2")->getProtection()    ->setLocked(PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);

図9
愛知大学情報メディアセンター

セルの保護－7－

Vol.28, No.1, 2018

TRUE の場合に太字になる

38 行目：文字の色

35 行目：斜体にするかどうか

ま た，getFont() の イ ン ス タ ン ス にTRUE の場合に斜体になる

対して指定できる設定をまとめて実36 行目：下 線の設定（紙面の関係上途行 し た い 場 合 は applyFromArray() メ

中で改行しているが，実際は

ソ ッ ド を 利 用 す る と 便 利 で あ る。 図一行）

10 の 33 行 目 か ら 38 行 目 と 同 じ 実 行 結

37 行目：フォントサイズ

果 に な る applyFromArray の 使 用 例

31. $sheet->getStyle("A2")->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
32. $sheet->getStyle("A2")->getFill()->getStartColor()->setRGB('FFC16E');
33. $sheet->getStyle("A2")->getFont()->setName('MSゴシック ');

34. $sheet->getStyle("A2")->getFont()->setBold(TRUE);
35. $sheet->getStyle("A2")->getFont()->setItalic(TRUE);
36. $sheet->getStyle("A2")->getFont()->    setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
37. $sheet->getStyle("A2")->getFont()->setSize(20);38. $sheet->getStyle("A2")->getFont()->getColor()->setRGB('043BB1');

図 10

セルのスタイル設定$sheet->getStyle("A2")->getFont()->applyFromArray(array(		'name' => 'MS		'bold' => TRUE,		

'italic' => FALSE,		

'underline' => PHPExcel_Style_Font::UNDERLINE_DOUBLE,		

'strike' => FALSE,		'size' => 20,		'color' => array(					ゴシック ','rgb' => '0000FF')));

図 11
愛知大学情報メディアセンター

applyFromArray の使用例
－8－Vol.28, No.1, 2018

39. $objPHPExcel->createSheet();40. $objPHPExcel->setActiveSheetIndex(1);41. $sheet = $objPHPExcel->getActiveSheet();42. $sheet->setTitle(" シート 2");
43. $sheet->setCellValue('A1', '2 つめのシート ');44. $objPHPExcel->setActiveSheetIndex(0);図 12シートの追加45. $writer = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');46. $writer->save('./writeTest.xlsx');

図 13

ファイルへの出力を 図 11 に 示 す。 図 11 で 示 し た よ う に

3.2.8

ファイルへの出力

applyFromArray() の引数に連想配列で最後にファイルへの出力方法につ設 定 を 渡 す。 こ の 配 列 の キ ー に 設 定 名

い て 示 す。 ま ず， 図 13 の 45 行 目 のを，値に設定する値を記載する。

よ う に， 編 集 を 行 っ た オ ブ ジ ェ ク ト（$objPHPExcel） を Excel2007 形 式 で3.2.7

シートの追加出 力 す る た め の writer を 作 成 す る。xls

シートを追加するためのコードを図 12（Excel2003 などの形式）で出力したい場に示す。39 行目で新たなシートを作成し合 は Excel5 を 指 定 す る。46 行 目 で 実 際ている。40 行目でそのシートを編集対象に出力している。save メソッドにファイにして，41 行目でシート情報を取り出しル名（パス）を与えることで，その名前ている。42 行目でシート名を，43 行目でで保存される。

このシートの A1 セルにデータを設定している。尚，44 行目はファイルを開いた

3.3

実行例

ときに 1 枚目のシートを表示するためにこれまでコードを実行した結果得られ加えている。この行が無い場合は，ファる Excel ファイルを図 14 と図 15 に示す。

イルを開いたときに 2 枚目のシートが表

図 14 は フ ァ イ を 開 い た と き の 表 示 で も示される。

ある。先頭のシートのセル A1～ A5 はそれぞれ図 8 と図 10 で指定した内容が表示

愛知大学情報メディアセンター

－9－Vol.28, No.1, 2018

図 14

先頭のシート

図 15

2 枚目シート

作成方法について述べた。また，PHP やPHPExcel の最新バージョンにあわせたインストールの仕方も示した。そして，ファイル作成のためのサンプルコードを記載し，その実行例を示した。
図 16

セル A1 の編集

前稿・本稿では PHPExcel をコマンドラインで利用についてのみ示した。しかし，PHP は Web ア プ リ ケ ー シ ョ ン と しされている。また，2 枚目のシートは，図てサーバサイドで実行することが多いた

12 で 記 述 し た 内 容 通 り に 作 成 さ れ て い

め，次稿ではその設定等についても述べる。ていきたい。

さらに先頭のシートはセル A2 以外はロックされていて値の変更等ができない

参考文献ようになっている。図 16 にセル A1 の編

1）岩田員典，松井吉光，長谷部勝也，谷口集を試みた場合の表示について示す。

正明，池森均，梅垣敦紀，齋藤毅，澤田貴行， 土 橋 喜， 中 尾 浩， 西 本 寛， 古 川 邦 之，

4．まとめ

毛利元昭：情報リテラシーのための Word，

本稿では前稿 4） では述べられなかった
PHPExcel を 利 用 し た Excel フ ァ イ ル の愛知大学情報メディアセンター

Excel 自動採点システムの構築と運用，教育改革 ICT 戦略大会

－ 10 －

pp.294–295（2013）。

Vol.28, No.1, 2018

2）Standard ECMA-376 Office OpenXML File Formats, http://www.
ecma-international.org/publications/standards/Ecma-376.htm（2006–2012）。
3）PHPExcel, https://github.com/
PHPOffice/PHPExcel
4）岩田員典：PHPExcel による Excel ファイルの読み込み，愛知大学

情報メディアセンター紀要「COM」，Vol.26，No.1 第 41 号，pp.73-79（2016）。
5）PHP, http://php.net
6）PHP For Windows,
http://windows.php.net/download

愛知大学情報メディアセンター

－ 11 －

Vol.28, No.1, 2018