dポイントプレゼントキャンペーン実施中!

phpによるExcel形式でのダウンロードプログラムを作っているのですが、どうしても分からない部分があり、質問させて頂きます。

下記のphpコードでExcel形式でのダウンロードを試みているのですが、Firefoxでは問題なく動作するのですが、IE6だと普通に
htmlとしてブラウザに表示されてしまいます。
最初は他のヘッダーが出力されてしまっているのかと思い、
header("Content-Type: application/vnd.ms-excel")の前に
headers_sent()関数を挿入してチェックしてみたのですが、
falseが返ってきており、問題はなさそうでした。
php.iniでもsession.auto_startは0で設定しています。
原因が分かる方、どなたかご教示お願いできませんでしょうか。
宜しくお願いします。

環境:WindowsXP IE6sp2

---hogehoge.php-----------
<?php
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=hoge.xls");
$aaa = '<html><head><title>hogehoge</title></head><body>';
$aaa .= '<table border="1"><tr><td>aaaaabb</td></tr>';
$aaa .= '<tr><td>aaaaacccc</td></tr></table></body></html>';
print $aaa;
exit;
?>

A 回答 (2件)

#これをダウンロードしてExcelファイルになるんでしょうか?



ブラウザに返しているContent-TypeはExcelですが、中身はhtmlですよね?IEはContent-Typeを重視しないので中身がhtmlだとhtmlで扱ってしまうと思います。

普通は

  <?php
  header("Content-Type: application/vnd.ms-excel");
  header("Content-Disposition: attachment; filename=hoge.xls");
  readfile("hoge.xls");
  ?>

といった書き方になると思いますが・・

この回答への補足

ご回答ありがとうございます。
プログラムは↓
http://www.bricklife.com/weblog/000051.html
のサイトにあった方法を参考に書いてみました。
それで、結果的にはアパッチの再起動をしたところ
IE6でも今現在は問題なくphpで書いたtableを、Excelで保存して、
開くことが出来ました。が、何故アパッチの再起動をしたら解決したのかが分からないのと、IE7では動作が不安定("開く" or "保存"のダイアログは開くが、保存を実行すると待機状態になり、一度キャンセルし、
再度実行すると今度はうまく行きます。2回目以降はずっと何度やってもうまく行く。。。)という状況であります。
やはり、Excelのhtml読み込み機能を使って、htmlをExcelで見るのは
無理があるのでしょうか?

補足日時:2008/03/16 17:44
    • good
    • 0

#正直なんでそんな無理をしないといけないのかがわかりません。



「Excelにhtmlのテーブルを読み込ませる」というのは、かなり閲覧環境を選びませんか?イントラ環境であればいいでしょうけど・・ひょっとしてイントラ向けのスクリプトでしょうか?(でもそれならIEやOfficeのバージョンは固定でしょうしねぇ・・)。

動的に作成しないといけないのであればCSV、そうでなければ普通のExcelファイルという「間違いなく動作する」方法を選択すべきだと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
おっしゃる通りイントラでのスクリプトなんですが、対象ブラウザーが
IE6,IE7なんですよね。要望がCSVではなくセルに色を付けたり、
簡単な罫線を表示させたいということだったので、
何か方法はないかと試していたんですが。
まあ、ExcelWriterモジュールとかを使用すれば動的に作成する
ことは可能なんですけど、あれはバグがあったりするので、
あまり使いたくはないなと思っていたので。

確かに、間違いなく動作する方法を選択するべきですね。

これで、この質問を閉じたいと思います。
ありがとうございました。

お礼日時:2008/03/16 21:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!