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ではないですが、ちょっとしたときに結構役に立つのでお試しあれ。

■ 関連書籍&ソフトウェア

Posted by ooba at 01:11 | Comments (18) | TrackBacks (12)
Trackbacks
TrackBack URL: http://www.bricklife.com/mt/mt-tb.cgi/13
簡単にExcelに出力
Excerpt: Webアプリから2行でExcelファイルを出力する方法 (bricklife.weblog.*) (hardでloxseな日々) Webアプリから Excel や Word のファイルをたった2行で生成する方法です。 この方法を使えば、Spreadsheet::WriteExcel/ParseExcel などを使わずに、かつどんな環境のどんな...
Weblog:
Tracked: 2004年1月21日 02:09
http://d.hatena.ne.jp/kcrt/20040121
Excerpt:
Weblog:
Tracked: 2004年1月21日 03:48
http://d.hatena.ne.jp/kcrt/20040121
Excerpt:
Weblog:
Tracked: 2004年1月21日 03:51
Webアプリから2行でExcelファイルを出力する方法
Excerpt: 実はMicrosoftも同じことを言っている。2行ではないけれど。
Weblog: はてなダイアリー - matarillo
Tracked: 2004年2月 3日 06:07
Webアプリから2行でExcelファイルを出力する方法
Excerpt: 目から鱗の落ちるような、とはこのこと!
Weblog: FileMaker Pro 7 によるWeb開発覚え書き
Tracked: 2005年2月 1日 12:51
【IT技術】WebアプリでExcel表示
Excerpt:  ども。笠原覺さんです。  今日の記事は備忘録的なものでして。 ◆CGIでExc...
Weblog: そんな大層なこたぁ言いません。
Tracked: 2006年11月18日 02:15
【IT技術】WebアプリでExcel表示
Excerpt:  ども。笠原覺さんです。  今日の記事は備忘録的なものでして。 ◆CGIでExc...
Weblog: そんな大層なこたぁ言いません。
Tracked: 2006年11月18日 02:16
【IT技術】WebアプリでExcel表示
Excerpt: シェアブログ204に投稿  ども。笠原覺さんです。  今日の記事は備忘録的なもの...
Weblog: そんな大層なこたぁ言いません。
Tracked: 2006年11月18日 02:21
【IT技術】WebアプリでExcel表示
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
php で、Excel に ファイルを表示させる方法
Excerpt: php を使い Excel に出力する方法を考えると、まず思い浮かぶのは .csv で、吐き出す方法。 確認のために書くと header(&quo...
Weblog: heipooh's 日記
Tracked: 2007年10月 9日 18:44
Ultram for long term chronic pain.
Excerpt: Ultram. Ultram er. Can you use low dose naltrexone and ultram. Addiction to u...
Weblog: Ultram.
Tracked: 2008年4月 7日 06:06
Comments
1 : name: ppp date: 2003/12/15 03:16 [RES]

ppppp

2 : name: kcrt date: 2004/01/21 03:54 [RES]

そういや、Windowsのコモンダイアログ(「ファイルを開く」ってやつ)つかってるアプリなら、ファイル名欄にURLを入れるだけで自動的にデータを一時ファイルに保存して開いてくれるんですよね。

3 : name: ooba date: 2004/01/22 01:41 [RES]

>>2 kcrt さん
Windowsのことはよくわかりませんが(^_^;)、
確かにそういうこともできますねー。

関係ないですが、ブラウザから開く場合でもURL入力する場合でも、
直開きする場合って、あんまりよくわかってない人だと、
「やべ!保存しちゃった!サーバのデータ大丈夫かな!?オロオロ」
とか勘違いしちゃうので注意が必要です(実体験数件)
Windowsの一時ファイルの扱い方ってキライです(^^

4 : name: takase date: 2004/02/10 09:53 [RES]

お久しぶりです。

便利な技ですね。ローカルのファイルをやってみたら綺麗に表が出ました。(文字化けしましたが(^^; )
今は使い道無いですが、きっと今後役に立ちそうです。
#うちの上司を納得させるのに・・・

5 : name: ooba date: 2004/02/11 15:32 [RES]

>>4 takase さん
おー、おひさしぶりです!
どうやってたどり着いたのか不思議です(^^;
使うときがくるまで小ネタとして覚えておいて下さい。

6 : name: naka date: 2004/03/17 15:17 [RES]

はじめまして、nakaといいます。
「WEBからexcel」求めていた答えにやっとめぐり合えたと喜んでおりましたが、何故か出来ません。

恥ずかしい話ですが確認させてください
tableを含んだhtmlファイルに
例の2行をメタタグで埋めるだけでいいんですよね

中の"hoge.xls"もそのままで構わないんでしょうか?
何度やっても普通に表示されるだけなんです。
もちろんexcel2000はインストールされています。
localでもサーバー上でも同じでした。
よろしければアドバイスお願いします。

7 : name: ooba date: 2004/03/17 16:41 [RES]

>>6 naka さん
これはWebアプリがHTTPヘッダーに追加するものなので、
HTMLファイルのメタタグに埋め込んでも動きません。
要するにCGIなどで出力するときにしか使えません。

静的なHTMLファイルをExcelで開かせたいのであれば、
ファイルの拡張子を"xls"にするとできると思います。
もしくは読みこんだファイルを出力すると同時に、
上記ヘッダーを追加するCGIを組む等も考えられます。

8 : name: naka date: 2004/03/17 17:41 [RES]

>>7 ooba さん
返答どうもありがとうございます。
そうだったんですか
今ひとつ理解が足りないため変なことをしていました。
これはphpでも同じ理屈ということですね
さっそく試してみます。

9 : name: rock date: 2004/03/22 13:49 [RES]

はじめまして。これをASP.NET+VB.NETでも使用できますでしょうか?

10 : name: ooba date: 2004/03/22 18:19 [RES]

>>9 rock さん
.NET系はまったく理解していないのですが、
基本的にHTTPヘッダーを出力できれば、
言語問わず可能な方法なはずです。

11 : name: hisa date: 2004/12/22 20:11 [RES]

こんばんは。WinXPで、.netでない普通のaspを書いています。
「frameset」を使って、左にメニュー、右にそのレスポンス画面を出力した際、
Response.Buffer = true
Response.ContentType = "application/vnd.ms-excel"
と書いてExcelシートを出力すると、日本語がどうしても文字化けしてしまいます。
(この記述はMSDNのサイトに書いてありました)
「frameset」を使わず全画面に展開させると、
きちんとExcelシートを表示(または保存)できます。
多分、「frameset」を使うと、何かの情報が
欠落してしまうからではないかと思うのですが、
どなたか対処法をご存知ではないでしょうか。

12 : name: ooba date: 2004/12/22 20:18 [RES]

>>11 hisa さん
うーん、おそらく一緒に表示している他のHTMLファイルの文字コードにひっぱられているのだと思いますが、いかがでしょうか。
全部UTF-8かShift_JISにすれば大丈夫な気がします。

13 : name: hisa date: 2004/12/24 08:31 [RES]

>>12 ooba さん
すばやいレスをありがとうございました。
encodeを「SHIFT_JIS」と明記したこともあるのですが、
結果は同じでした。
「frameset」が良くないのは間違いないと思うのですが....
とりあえず全画面表示で逃げておきます。
ありがとうございました。

14 : name: TOM date: 2005/05/24 17:16 [RES]

こんにちは。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は関係ありませんでした。

ここで質問するのは場違いかもしれませんが、他に頼る所がありません。
もし何かわかれば教えて頂けないでしょうか?

15 : name: ooba date: 2005/05/26 01:27 [RES]

>>14 TOM さん
うーん、申し訳ないのですが謎です。
Windowsのことはよくわからないんですよね、実は(^^;

以下はOKなのでしょうか?
これがOKなら出来そうな感じがしますし、出来ないならWinXPの問題な気がします。

1.普通のExcelファイルはネット越しに開けるか
2.HTMLファイルの拡張子を「.xls」にしたファイルはネット越しに開けるか

16 : name: TOM date: 2005/05/26 16:50 [RES]

>oobaさん

返信ありがとうございます。

>1.普通のExcelファイルはネット越しに開けるか
>2.HTMLファイルの拡張子を「.xls」にしたファイルはネット越しに開けるか

1・2ともに普通に開けました・・。

仕方が無いので、ユーザーには必ずローカルに保存するよう指示します。
もし何かわかればまた教えて下さい。
ありがとうございました。

17 : name: ooba date: 2005/05/26 17:01 [RES]

>>16 TOM さん
うーん、URLの問題ですかねぇ…。謎です。
お役に立てずすみません。

18 : name: neipa date: 2005/10/27 22:10 [RES]

私も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">
を入れることにより、化けずに出せました。

Post a comment




Powered by Movable Type 4.0