SQLの窓

2014年04月03日


VBScript : ADO で Excel2007(Excel 2010、Excel 2013) にアクセスする( シートをテーブルとして読み込む )

Excel2007(Excel 12.0) と Excel2010 と Excel2013で確認しました。
※ Excel 2010 は、Excel 14.0 だそうですが、接続文字列は Excel 12.0 でのみ動作しました。

Excel 2013(Windows8) では、Microsoft Access データベース エンジン 2010 再頒布可能コンポーネントをダウンロードしてインストールする必要があります。( ※参考1※参考2 )


( 32ビット版と64ビット版があるので選択してダウンロードします )


IMEX=1 : 概要としては、予期しない列の値の変化を抑制してくれます。仕様的には、「intermixed」で、データ行を常にテキストとして読み取ることをドライバーに指示しています。こちらを参照して下さい

関連する Microsoft ドキュメント
[HOWTO] Visual Basic または VBA から ADO を Excel データで使用する

コマンドプロンプトで、カレントに Book1.xlsx を置いて、cscript.exe excel_ado.vbs でテストします

excel_ado.vbs
' *******************************************
' オブジェクト作成
' *******************************************
Set Cn = CreateObject( "ADODB.Connection" )
Set Rs = CreateObject( "ADODB.Recordset" )

' *******************************************
' スクリプトがあるディレクトリ
' *******************************************
' ファイルシステムオブジェクト
Set Fso = CreateObject( "Scripting.FileSystemObject" )

' 現在実行されているスクリプトのフルパス
strCurPath = WScript.ScriptFullName

' スクリプトのファイルオブジェクトを作成
Set obj = Fso.GetFile( strCurPath )

' スクリプトファイルトが存在するフォルダオブジェクト
Set obj = obj.ParentFolder

' そのフォルダのフルパス
strCurPath = obj.Path

' *******************************************
' 接続用の文字列を準備
' *******************************************
' 2007 以降の Excel 
FileName = "Book1.xlsx"
' 接続文字列
ConnectionString = _
	"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strCurPath & "\" & FileName & ";" & _
	"Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"""

' HDR=YES にすると、一行目が列名になります。
' HDR=NO の場合は、F1,F2,F3,F4,F5,F6,F7,F8,F9,F10 となっています

' *******************************************
' 接続
' *******************************************
on error resume next
Cn.Open ConnectionString
if Err.Number <> 0 then
	Wscript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

' *******************************************
' レコードセット取得
' *******************************************
Query = "select * from [Sheet1$]"
on error resume next
Rs.Open Query, Cn
if Err.Number <> 0 then
	Cn.Close
	Wscript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

' *******************************************
' タイトル出力
' *******************************************
Buffer = ""
For i = 0 to Rs.Fields.Count - 1
	if Buffer <> "" then
		Buffer = Buffer & ","
	end if
	Buffer = Buffer & Rs.Fields(i).Name
Next
Wscript.echo Buffer & vbCrLf

' *******************************************
' データ出力
' *******************************************
Do While not Rs.EOF
	Buffer = ""
	For i = 0 to Rs.Fields.Count - 1
		if Buffer <> "" then
			Buffer = Buffer & ","
		end if
		Buffer = Buffer & Rs.Fields(i).Value
	Next
	Wscript.echo Buffer
	Rs.MoveNext
Loop

' *******************************************
' レコードセットクローズ
' *******************************************
Rs.Close

' *******************************************
' 接続解除
' *******************************************
Cn.Close

' *******************************************
' オブジェクト解放
' *******************************************
Set Rs = Nothing
Set Cn = Nothing



▼ 新旧接続文字列の比較( SQLServer の OPENDATASOURCE 関数による Excel の参照 )
select * from
OPENDATASOURCE(
	'Microsoft.Jet.OLEDB.4.0',
	'Data Source="C:\user\data\商品.xls";Extended properties=Excel 8.0'
)...[Sheet1$]

select * from
OPENDATASOURCE(
	'Microsoft.ACE.OLEDB.12.0',
	'Data Source="C:\user\data\商品.xlsx";Extended properties=Excel 12.0'
)...[Sheet1$]


関連する Mocrosodt ドキュメント

Access 2010 を使用したデータ プログラミング

関連する記事

posted by lightbox at 2014-04-03 15:39 | VBS + ADO | このブログの読者になる | 更新情報をチェックする
バッチ処理

Microsoft Office
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
PHP正規表現チェッカー
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり