手軽にできるウェブアプリケーション構築術

PHP

第3回

テキストデータをエクセルに出力しよう
前回は、ウェブ上のフォームから、アンケートを収集するスクリプトを書いてみた。これで、フォームで入力した値がテキストファイルにどんどん追加されるようになった。さて今回は、ブラウザーから自動的にエクセルを呼び出して、集計／分析まで行うPHP スクリプトに挑戦してみよう。
宮本和明

テキストファイルをどんなエクセル表示にしたいか
前回は、1のアンケートフォームに入力すると、それがテキストファイル（2）に書き

1

アンケートフォーム足されるようなPHP スクリプトを書いた。
通常、このテキストファイルをダウンロードして、エクセルなどで集計処理をするはずである（この処理をしないのならば、何のた前回めにアンケートを取ったか分からない！）。
たとえば、3 のようなエクセルシートにする場合を考えてみよう。3では、エクセルの2

テキストファイルとして蓄積

COUNTA 関数（空欄でないセルの数を数える）でアンケート結果を集計し、SUM 関数（数値の合計を出す）と組み合わせて、それぞれが何パーセントを占めているかを集計している。
しかし、テキストファイルをいちいちエクセルに変換してから、書式を変更するのは面倒である。そこで、PHPを使って、いきなり3通常はエクセルでテキストファイルを開いて集計作業

手 作 業の状態までもっていこうというのが今回の目標である。

314 INTERNET magazine 2001/9

3

インターネットマガジン／株式会社インプレスR&D

関数：与えられたデータをもとにして、あらかじめ定義された処理をおこない、その結果を返す計算機能のこと。

©1994-2007 Impress R&D

自動化

<?
//読み込み先ファイルの指定$filename =C:result.txt

（1）

;

（2）

//データを配列に入れる

PHP$lines =file($filename);$datanum =count($lines);for($i=0;$i<$datanum;$i++){

テーブルタグで整形$lines[ $i] =chop($lines[ $i] );（3）list($color[ $i] ,$name[ $i] ,$email[ $i] )=@split( \ t ,$lines[ $i] );}テキストファイルをPHPで読み込んで、テ?><HTML>

ーブルタグで整形をして出力するのは、PHP<HEAD>に慣れてくると比較的簡単に思いつくはずだ。

<META HTTP-EQUIV=Content-Type CONTENT=

text/html;CHARSET=Shift_JIS ></HEAD>

まずは、そこからスタートしてみよう。

<BODY>

リスト１では、HTMLで一覧画面を作って<TABLE BORDER>いる。
（1）で読み込みファイルを指定して、<!--タイトル部-->（2）で、すべての値を配列に格納している。

<TR>

file（）関数を使うと、テキストファイルを<TD> 名前 </TD><TD> アドレス </TD><TD> 赤 </TD><TD> 橙 </TD><TD> 黄 </TD><TD> 茶 </TD></TR>

１行ずつの配列に読み込んでくれる。それを<!--データ記述部-->さらにsplit 関数で分割し、list 関数を使って<?

$color[]、$email[]、$color[]という配列にfor($j=0;$j<$datanum;$j++){

分けている（3）。
「データ記述部」では、データの数だけfor

echo<TR>\ n ;echo

<TD> .$name[ $j] . </TD>\ n ;echo<TD> .$email[ $j] . </TD>\ n ;echo<TD> ;

if($color[ $j] == red

文で繰り返して、データ内容をテーブルタグechoの中に出力している（4）。

){赤 ;}
echo</TD>\ n<TD> ;if($color[ $j] == orangeecho){

橙 ;（4）}
echo</TD>\ n<TD> ;if($color[ $j] == yellow ){echo

黄 ;}
echo

</TD>\ n<TD> ;if($color[ $j] == brown ){echo

茶 ;}
echo

</TD>\ n ;echo</TR>\ n ;}これは、データをＨＴＭＬ形式で表示させた場合?></TABLE></BODY></HTML>db̲conv.php●配列を扱う関数「文字列」を指定の「正規表現」で分断し、$array の配列

・file ……$lines = file（ ファイル名 ）;に入れる。

「ファイル名」で指定されたファイルを読み込み、1 行ずつ、$lines[]の配列に追加する。1 行目の内容は$lines[0]に、2 行目の内容は$lines[1]に、それぞれ代入される。
・split ……$array = split（ 正規表現,・ list …… list（ 変数 1,変数 2,変数 3, …) =$array;「$array 」で与えられた配列を、それぞれ「変数1 」「変数2文字列 ）;」「変数3 」…に代入していく。

インターネットマガジン／株式会社インプレスR&D

テーブル：表計算ソフトで、「列」と「行」でデータが配置される表のこと。

©1994-2007 Impress R&D

INTERNET magazine 2001/9315ヘッダー関数を使ってエクセルを呼び出す
ここで1つ新しいルールを覚えよう。そもそせる。インターネットエクスプローラがどの外

header (もインターネットエクスプローラは、自分以部のどのアプリケーションを呼び出すかは、ヘapplication/vnd.ms-excel

外のアプリケーションを呼び出せるような作ッダーで定義でき、エクセルを呼び出す場合りになっている。リアルオーディオや、アクロは、次のようにヘッダー関数を利用すること

行頭でヘッダーを定義したあとは、前のペバット（PDF）はその代表的なものだが、そにより、ページ全体をエクセルで出力するよージのHTML をそのまま記述すればよい。な

れだけではなく、エクセルやワードも呼び出うに指定できる。

ぜかというと、最近のエクセルはHTML が読Content-Type:);めるからである。 特 にテーブルタグは、CENTER やBGCOLOR といったオプションもかなり忠実に再現してくれる。

このヘッダーがあると、PHP が開いたときにダイアログが出る「このファイルを上記の場所から開く」を選択すると、ブラウザー内でExcelが開く「このファイルをディスクに保存する」を選択す
ると、Excelファイルの保存先を聞いてくる

316 INTERNET magazine 2001/9

インターネットマガジン／株式会社インプレスR&D

リアルオーディオ：インターネット経由で音声や画像を再生する（ストリーミング）システム。

©1994-2007 Impress R&D

PHP=SUMや=COUNTAなどのエクセルの関数を使う
さて、インターネットエクスプローラ上かことである。また、関数だけでなく、パーセ選択するという手順を踏む。しかし、PHPをらエクセルを開くワザはこれでできるようになントなどの書式も指定をしたい。通常、エク使うことによって、その書式設定も、あらかった。しかし最終的にやりたいことは、SUM

セルの書式は、セルを右クリックして「セルじめセットできるのだ。

やCOUNTA などのエクセル関数を埋め込むの書式設定…」を開き、「表示形式」などをこれはちょっと奥が深いので、次回のテーマにしたい。できそうだなと思われた方は、ぜひ挑戦してみてほしい。

次回は、このように関数を埋め込んだり、書式をあらかじめＰＨＰ上で設定したりするやり方を説明する● PHPの新刊紹介
本連載の著者が書いた「ホンキで学ぼう！ PHPのキホン」が、書店にて好評発売中です。
演習問題や、PHP を商用利用する場合の手引き、社内PHP システム導入記など、初心者からビジネスユーザーまで幅広く対応しています。
もう1歩進んだウェブアプリケーションを構築したい方にはイチオシです。
収録内容： ● Web アプリケーションを知ろう
ブラウザ＋アプリケーションが生み出す新しいコミュニケーション● PHP で作るアプリケーション2

データベースで作るオンライン「お気に入り」システム●社内PHP システム導入記

著者： 宮本 和明
出版：秀和システム
ISBN： 4-7980-0119-8
本体価格： ¥2,600

経費精算書をオンライン化しました …ほか。

インターネットマガジン／株式会社インプレスR&Dアプリケーション：ワープロや表計算、データベースなどコンピュータを使って、文書や表、データベースを作るなど、それぞれの目的を実現するためのソフトのこと。アプリケーションソフトウェアというのを略した言いかた。
©1994-2007 Impress R&D

INTERNET magazine 2001/9317

［インターネットマガジン バックナンバーアーカイブ］ ご利用上の注意
この PDF ファイルは、株式会社インプレス R&D（株式会社インプレスから分割）が 1994 年～2006 年まで発行した月刊誌『インターネットマガジン』の誌面を PDF 化し、「インターネットマガジン バックナンバーアーカイブ」として以下のウェブサイト「All-in-One INTERNET magazine 2.0」で公開しているものです。

http://i.impressRD.jp/bn
このファイルをご利用いただくにあたり、下記の注意事項を必ずお読みください。
z 記載されている内容（技術解説、URL、団体・企業名、商品名、価格、プレゼント募集、アンケートなど）は発行当時のものです。
z 収録されている内容は著作権法上の保護を受けています。著作権はそれぞれの記事の著作者（執筆者、写真の撮影者、イラストの作成者、編集部など）が保持しています。
z 著作者から許諾が得られなかった著作物は収録されていない場合があります。
z このファイルやその内容を改変したり、商用を目的として再利用することはできません。あくまで個人や企業の非商用利用での閲覧、複製、送信に限られます。
z 収録されている内容を何らかの媒体に引用としてご利用する際は、出典として媒体名および月号、該当ページ番号、発行元（株式会社インプレス R&D）、コピーライトなどの情報をご明記ください。
z オリジナルの雑誌の発行時点では、株式会社インプレス R&D（当時は株式会社インプレス）と著作権者は内容が正確なものであるように最大限に努めましたが、すべての情報が完全に正確であることは保証できません。このファイルの内容に起因する直接的および間接的な損害に対して、一切の責任を負いません。お客様個人の責任においてご利用ください。

このファイルに関するお問い合わせ先
All-in-One INTERNET magazine 編集部
im-info@impress.co.jp
Copyright © 1994-2007 Impress R&D, an Impress Group company. All rights reserved.