|
ADOでExcel を 使った ソースコードを紹介する表示色の説明:ASP VBScriptは <% 〜 %> キーワードはADOでExcel です。
<%@LANGUAGE=VBScript%>
<html>
<head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=x-sjis">
<title>ADOでExcel(*.xls)に接続 [Sheet1$]で列名無しテスト</title>
</head>
<body>
<h1>ADOでExcel(*.xls)に接続 [Sheet1$]で列名無しテスト</h1>
test084-1.asp<br>
ASPからADOを使用してExcel(*.xls)に接続する<br>
Sheet1$でシートにアクセスしてみました。<br>
シートのイメージは、<br>
<img src="http://www.ken3.org/backno/gif/asp084-01.gif"><br>
です。
[<a Href="test084.xls" TARGET="_blank">test084.xls</a>]←がファイルです<br>
<br>
で<b>select * from Sheet1$</b>とすると<br>
Microsoft OLE DB Provider for ODBC Drivers エラー '80040e14' <br>
[Microsoft][ODBC Excel Driver] FROM 句の構文エラーです。 <br>
/cgi-bin/test/test084-1.asp, 行 36 <br>
と、<b>エラー</b>となってしまう・・(涙)何でと思いつつ<br>
それなら、<b>select * from [Sheet1$]</b>と[]で囲うのが正解。
<hr>
<%
'ADO DB Recordset オブジェクトを作成する、英文そのままじゃん
Set rs=Server.CreateObject("ADODB.Recordset")
'接続文字
Con = "Driver={Microsoft Excel Driver (*.xls)};DBQ=" & _
Server.MapPath("test084.xls") & ";"
Response.Write "作った、使った接続文字列は<br>"
Response.Write "<CODE>Con = <b>" & Con & "</b></CODE><hr>"
'SQL文 Sheet1$として、シートのみ指定してみます
strSQL = "select * from [Sheet1$]"
Response.Write "作った、使ったSQL文字列は<br>"
Response.Write "<CODE>strSQL = <b>" & strSQL & "</b></CODE><hr>"
'接続文字列、SQLを渡して、レコードセットを開く
Rs.Open strSQL, Con, 0 '0=adOpenForwardOnly
Response.Write "<CODE>Rs.Open strSQL, Con, 0</CODE>"
Response.Write "で、レコードセットを作成しました<hr>"
'テーブルでデータを表示する
Response.Write "<TABLE border='1'>"
'項目名の表示(シートしか指定してないのに?)
Response.Write "<TR>"
For Each FldA In Rs.Fields 'フィールド分ループする
Response.Write "<TH>" & FldA.Name & "</TH>" '.Nameでフィールド名を表示
Next
Response.Write "</TR>"
'レコードが終了するまでループ(シートしか指定してないけど大丈夫?)
Do While Rs.EOF = False
Response.Write "<TR>"
For Each FldA In Rs.Fields 'フィールド分ループする
Response.Write "<TD>" & FldA.Value & "</TD>" '.Valueで値を表示
Next
Response.Write "</TR>"
Rs.MoveNext '次のレコードへ移動
Loop
Response.Write "</TABLE>" 'テーブル終了
Rs.Close
%>
<hr>
列名無しで接続できるが、先頭行が強引にフィールド名となってしまう。<br>
B3のセルに対して、アクセスするには、<br>
先頭行(A1やB1,C1,D1)がフィールド名となっているので、<br>
Open時のカーソルは、A2,B2,C2と2行目からのスタートなので、<br>
3行目に行くために、.MoveNextで1行空読みして、<br>
Rs.Fields(1)でOKかなぁ。<hr>
<% 'レコードセットを再オープンする
Response.Write "Rs.Open strSQL, Con, 0<br>"
Rs.Open strSQL, Con, 0 '0=adOpenForwardOnly
Response.Write "Rs.MoveNext<br>"
Rs.MoveNext '1行飛ばす
Response.Write "Rs.Fields(1)は<big>[" & Rs.Fields(1) & "]</big>です<br>"
Response.Write "Rs.MoveNext<br>"
Rs.MoveNext '1行飛ばす
Response.Write "現在のRs.Fields(0)は<big>[" & Rs.Fields(0) & "]</big>です"
Rs.Close 'クローズする
%>
<hr>
</body>
</html>
|
|