asp(vbscript)で簡易的にEXCEL方式にファイル出力する

こんにちわ。
本当に久しぶりの更新になってしまいました。
(まぁ、いつものことなんですけど…)

今回は、現在クライアント様からデータをcsv方式ではなく、
asp(vbscript)にてエクセルに吐き出してほしいという要望があり、
簡易に吐き出す方法を記載したいと思います。


<%@ language=vbscript %>
<%
'------------------------------------
'本来はここにデータベースとつなげたり
'引数の処理したりをします
'今回、データベースから引っ張ってきた
'レコードセットをObjRS1とします
'------------------------------------
%>
<%
response.buffer = true
response.ContentType = "application/vnd.ms-excel"
response.AddHeader "content-disposition", "inline; filename=test.xls"
%>
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=shift_jis">
<meta name=ProgId content=Excel.Sheet>
<meta name=Generator content="Microsoft Excel 10">
<title>タイトル</title>
</head>

<body>
<table border="1">
	<tr>
		<th style="background-color: #add8e6" width="70">ID</th>
		<th style="background-color: #add8e6" width="70">名前</th>
	</tr>

	<%
	Do Until ObjRS1.EOF
	%>
	<tr>
		<td style='mso-number-format:"\@";'><%=ObjRS1("ID")%></th>
		<td><%=ObjRS1("UserName")%></th>
	</tr>
	<%
	ObjRS1.MoveNext
	Loop
	%>

</table>

</body>
</html>
<%
response.flush
response.end
%>

はい。意外とまとめてしまうとこんなものなのです。
要はhtml方式で作成して、ヘッダー部分でEXCELとして認識させる
という方式なのです。

VBScriptリファレンス

response.buffer から headの閉じタグまではお約束事。
最後のresponse.flush、response.endもお約束事です。
あとは何てこと無い、データをテーブルで作成・表示しているだけなのです。

また、 style=’mso-number-format:”\@”;’ というスタイルを入れていますが、
これは、EXCELで開いた際に、00001という頭に0が付く文字については、
EXCELでは削除してしまうので、文字列として認識させるために、
スタイルを入れています。

お試しあれ。

2014.11.17追加
【続報】webからエクセルファイルに吐き出す方法
も、ご覧ください。