2016-03-18 12 views
0

SQLクエリでExcelファイルを作成するための単純なVBSスクリプトを作成しようとしています。下のコードはすべて、セルA1に選択している3つの列をすべて入れている点を除き、すべて機能します。ヘッダーで標準のExcel出力を作成するにはどうすればよいですか?VBS:SQLをExcelファイルにプルする

set objExcel = CreateObject("Excel.Application") 
objExcel.Application.DisplayAlerts = False 
set objWorkbook=objExcel.workbooks.add() 

Dim Connection 
Dim Recordset 
Dim SQL 
SQL = "SELECT PersonID, FirstName, LastName FROM [TestDB].[dbo].[Persons]" 
Set Connection = CreateObject("ADODB.Connection") 
Set Recordset = CreateObject("ADODB.Recordset") 

Connection.Open = "Provider=SQLOLEDB; Data Source=compname\SQL; Initial Catalog=DB; UID=usera; Integrated Security=SSPI" 
Recordset.Open SQL, Connection 

dim resultString, oRS 
Set oRS = Connection.Execute(SQL) 

resultString = oRS.GetString 

Recordset.Close 
Set Recordset=nothing 
Connection.Close 
Set Connection=nothing 

Set objWorksheet = objExcel.Worksheets("Sheet1") 
objWorksheet.Name = "Third" 
objWorksheet.Activate 
objWorksheet.Cells(1, 1).Value = resultString 

objWorkbook.Saveas "C:\Users\usera\Desktop\Testing.xlsx" 
objWorkbook.Close 
objExcel.workbooks.close 
objExcel.quit 
set objExcel = nothing 
msgbox("Saved") 
+0

あなたは、なぜあなたはそれがレコードセットと接続を閉じる前に?自分自身をバック解析する期待する。 'resultString = oRS.GetString'を使用して(単一の文字列に行の内容のすべてを入れている、読んでフィールドの値をシート内の適切なセルに入力してください –

+0

これは問題です。どのように分けることができますか? –

+0

レコードセットのフィールドから読み込みます。 –

答えて

1

resultString = oRS.GetStringですべてのデータを1つの文字列に変換しています。その文字列を解析して個々の値に戻って細胞を移入することを期待するのはなぜですか?

レコードセットのFieldsコレクションから読み込み、各セルに値を設定する必要があります。あなたがそうする方法を示すサンプルがあります。 (ヒント:あなたのコードには、必要ではない反復的なものがたくさん含まれています - 私の代わりに何をしているのか注意してください)。

Dim Conn 
Dim RS 
Dim SQL 
SQL = "SELECT PersonID, FirstName, LastName FROM [TestDB].[dbo].[Persons]" 
Set Conn = CreateObject("ADODB.Connection") 
Conn.Open = "Provider=SQLOLEDB; Data Source=compname\SQL; Initial Catalog=DB; UID=usera; Integrated Security=SSPI" 

Set RS = Conn.Execute(SQL) 

Set Sheet = ActiveSheet 
Sheet.Activate 

Dim R 
R = 1 
While RS.EOF = False 
    Sheet.Cells(R, 1).Value = RS.Fields(0) 
    Sheet.Cells(R, 2).Value = RS.Fields(1) 
    Sheet.Cells(R, 3).Value = RS.Fields(2) 
    RS.MoveNext 
    R = R + 1 
Wend 

RS.Close 
Conn.Close 
+0

ありがとうございました! –

関連する問題