2003/10/03 金
Webアプリから2行でExcelファイルを出力する方法
Webアプリから Excel や Word のファイルをたった2行で生成する方法です。
この方法を使えば、Spreadsheet::WriteExcel/ParseExcel などを使わずに、かつどんな環境のどんな言語で記述されているWebアプリケーションでも、Excel文章を出力できます。厳密に言うと、「ExcelやWordでも開けるファイル」なんですけどね(^^;
はじめて教えてもらった時に、感動というか拍子抜けしたので、みなさんも同じ気持ちを味わって下さい(^^
もったいぶって背景から。
会社にお勤めのみなさんには共感していただけると思いますが、世の中にはすべての作業を Office系アプリで行う方がいらっしゃいます。そういう方が「今後○○のデータはサーバで管理しよう」などとおっしゃりはじめたら、「お、どんなシステムだ?」と期待してはいけません。
経験上98%くらいは「Excelファイルをサーバで共有した」だけだからです(^^;
こちらがせっかく Web+DBなんかでシステムを組んでいても(そしてそれが要求どおりだったとしても)、そういう方々は平気な顔して「このデータ、Excelでちょーだい」とかおっしゃられるので、余計な作業が増えることが多々あります。一時的な対応ですむときは、CSVを渡して終わりにするんですが。
そんなときにこの方法です。WebアプリからHTML出力する時に、HTTPヘッダーに以下の2行を加えるだけです。
Content-Type: application/vnd.ms-excel Content-Disposition: attachment; filename="hoge.xls"
そうです。要は ExcelやWordの HTML読み込み機能を使って、直接開かせているだけです。簡単でしょ?(^^
でも、table は結構しっかりとした表になりますし、フォントや色にも対応してくれます。なにより、適当に幅とかを整形して出力してくれるのが助かります。「attachment」を「inline」にすると、IEなどならブラウザ上で開かせることもできます。Wordのファイルとして出力したい場合は、Content-Type を「application/vnd.ms-word」にして、ファイル名を「hoge.doc」などに変えてあげます。
ただ、上記のようにContent-Typeやファイル名を指定しても、ファイル内容自体はHTMLファイルです。何も指定しないと保存し直す時に、種類が「HTMLファイル」になってしまうので注意が必要です。それでも「HTMLファイルをローカルに保存してからExcelで開いて下さい」というよりは、ウケがいいと思います(^^
(種類を「Excelファイル」にして保存し直せば、そのあとは普通に使えます)
たいしたTipsではないですが、ちょっとしたときに結構役に立つのでお試しあれ。
■ 関連書籍&ソフトウェア
Excerpt: Webアプリから2行でExcelファイルを出力する方法 (bricklife.weblog.*) (hardでloxseな日々) Webアプリから Excel や Word のファイルをたった2行で生成する方法です。 この方法を使えば、Spreadsheet::WriteExcel/ParseExcel などを使わずに、かつどんな環境のどんな...
Weblog: 屍
Tracked: 2004年1月21日 02:09
Excerpt:
Weblog:
Tracked: 2004年1月21日 03:48
Excerpt:
Weblog:
Tracked: 2004年1月21日 03:51
Excerpt: 実はMicrosoftも同じことを言っている。2行ではないけれど。
Weblog: はてなダイアリー - matarillo
Tracked: 2004年2月 3日 06:07
Excerpt: 目から鱗の落ちるような、とはこのこと!
Weblog: FileMaker Pro 7 によるWeb開発覚え書き
Tracked: 2005年2月 1日 12:51
Excerpt: ども。笠原覺さんです。 今日の記事は備忘録的なものでして。 ◆CGIでExc...
Weblog: そんな大層なこたぁ言いません。
Tracked: 2006年11月18日 02:15
Excerpt: ども。笠原覺さんです。 今日の記事は備忘録的なものでして。 ◆CGIでExc...
Weblog: そんな大層なこたぁ言いません。
Tracked: 2006年11月18日 02:16
Excerpt: シェアブログ204に投稿 ども。笠原覺さんです。 今日の記事は備忘録的なもの...
Weblog: そんな大層なこたぁ言いません。
Tracked: 2006年11月18日 02:21
Excerpt: シェアブログ204に投稿 ども。笠原覺さんです。 今日の記事は備忘録的なもの...
Weblog: そんな大層なこたぁ言いません。
Tracked: 2006年11月18日 08:46
Excerpt: Content-Type: application/vnd.ms-excel Content-Disposition: attachment; filenam...
Weblog: そいや!!
Tracked: 2007年7月 9日 15:43
Excerpt: php を使い Excel に出力する方法を考えると、まず思い浮かぶのは .csv で、吐き出す方法。 確認のために書くと header(&quo...
Weblog: heipooh's 日記
Tracked: 2007年10月 9日 18:44
Excerpt: Ultram. Ultram er. Can you use low dose naltrexone and ultram. Addiction to u...
Weblog: Ultram.
Tracked: 2008年4月 7日 06:06
そういや、Windowsのコモンダイアログ(「ファイルを開く」ってやつ)つかってるアプリなら、ファイル名欄にURLを入れるだけで自動的にデータを一時ファイルに保存して開いてくれるんですよね。
>>2 kcrt さん
Windowsのことはよくわかりませんが(^_^;)、
確かにそういうこともできますねー。
関係ないですが、ブラウザから開く場合でもURL入力する場合でも、
直開きする場合って、あんまりよくわかってない人だと、
「やべ!保存しちゃった!サーバのデータ大丈夫かな!?オロオロ」
とか勘違いしちゃうので注意が必要です(実体験数件)
Windowsの一時ファイルの扱い方ってキライです(^^
お久しぶりです。
便利な技ですね。ローカルのファイルをやってみたら綺麗に表が出ました。(文字化けしましたが(^^; )
今は使い道無いですが、きっと今後役に立ちそうです。
#うちの上司を納得させるのに・・・
>>4 takase さん
おー、おひさしぶりです!
どうやってたどり着いたのか不思議です(^^;
使うときがくるまで小ネタとして覚えておいて下さい。
はじめまして、nakaといいます。
「WEBからexcel」求めていた答えにやっとめぐり合えたと喜んでおりましたが、何故か出来ません。
恥ずかしい話ですが確認させてください
tableを含んだhtmlファイルに
例の2行をメタタグで埋めるだけでいいんですよね
中の"hoge.xls"もそのままで構わないんでしょうか?
何度やっても普通に表示されるだけなんです。
もちろんexcel2000はインストールされています。
localでもサーバー上でも同じでした。
よろしければアドバイスお願いします。
>>6 naka さん
これはWebアプリがHTTPヘッダーに追加するものなので、
HTMLファイルのメタタグに埋め込んでも動きません。
要するにCGIなどで出力するときにしか使えません。
静的なHTMLファイルをExcelで開かせたいのであれば、
ファイルの拡張子を"xls"にするとできると思います。
もしくは読みこんだファイルを出力すると同時に、
上記ヘッダーを追加するCGIを組む等も考えられます。
>>7 ooba さん
返答どうもありがとうございます。
そうだったんですか
今ひとつ理解が足りないため変なことをしていました。
これはphpでも同じ理屈ということですね
さっそく試してみます。
>>9 rock さん
.NET系はまったく理解していないのですが、
基本的にHTTPヘッダーを出力できれば、
言語問わず可能な方法なはずです。
こんばんは。WinXPで、.netでない普通のaspを書いています。
「frameset」を使って、左にメニュー、右にそのレスポンス画面を出力した際、
Response.Buffer = true
Response.ContentType = "application/vnd.ms-excel"
と書いてExcelシートを出力すると、日本語がどうしても文字化けしてしまいます。
(この記述はMSDNのサイトに書いてありました)
「frameset」を使わず全画面に展開させると、
きちんとExcelシートを表示(または保存)できます。
多分、「frameset」を使うと、何かの情報が
欠落してしまうからではないかと思うのですが、
どなたか対処法をご存知ではないでしょうか。
>>11 hisa さん
うーん、おそらく一緒に表示している他のHTMLファイルの文字コードにひっぱられているのだと思いますが、いかがでしょうか。
全部UTF-8かShift_JISにすれば大丈夫な気がします。
>>12 ooba さん
すばやいレスをありがとうございました。
encodeを「SHIFT_JIS」と明記したこともあるのですが、
結果は同じでした。
「frameset」が良くないのは間違いないと思うのですが....
とりあえず全画面表示で逃げておきます。
ありがとうございました。
こんにちは。Googleからたどり着きました。
PHPで処理したDB2のデータをExcelで表示したいのですが、WINXPだと開けません。
以下のような状況です。
「ファイルのダウンロード」ダイアログで・・
1:「保存」はW2K・WXPともにできます。
2:「開く」はW2Kはできますが、WXPはできません。
3:エラーメッセージは「C:¥documents‾Local Settings‾Temporary Internet Files¥Content.IE5‾aaa.xlsが見つかりません。
ファイル名およびファイルの保存場所が正しいか確認‾」です。
4:先にExcelを新規で立ち上げておくとエラーは出ずに開きます。
5:ttp://support.microsoft.com/default.aspx?scid=kb;ja;jp410226は関係ありませんでした。
ここで質問するのは場違いかもしれませんが、他に頼る所がありません。
もし何かわかれば教えて頂けないでしょうか?
>>14 TOM さん
うーん、申し訳ないのですが謎です。
Windowsのことはよくわからないんですよね、実は(^^;
以下はOKなのでしょうか?
これがOKなら出来そうな感じがしますし、出来ないならWinXPの問題な気がします。
1.普通のExcelファイルはネット越しに開けるか
2.HTMLファイルの拡張子を「.xls」にしたファイルはネット越しに開けるか
>oobaさん
返信ありがとうございます。
>1.普通のExcelファイルはネット越しに開けるか
>2.HTMLファイルの拡張子を「.xls」にしたファイルはネット越しに開けるか
1・2ともに普通に開けました・・。
仕方が無いので、ユーザーには必ずローカルに保存するよう指示します。
もし何かわかればまた教えて下さい。
ありがとうございました。
私もGoogleから来ました。正確にはトラバされているfmp.kojima1.netさん経由ですが。
拡張子xlsなのに中身がhtmlって笑えますね。でもこういうのができることさえ知りませんでした。
>>11 hisa さん
framesetを使ってないので多分参考にならないと思いますが^^
PHP(出力文字コードはEUC-JP)でoobaさんの書いた2行を追加し、さらに<html><head>の後に
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
を入れることにより、化けずに出せました。













