Запрос SQL из Excel 2007 и возвращение нескольких значений - PullRequest
2 голосов
/ 16 февраля 2011

Я пытаюсь взять небольшой объем данных, около 200 полей в Excel и извлечь данные из SQL с этим полем в предложении where для каждого элемента.

TABLE:

ID  Name    Phone
1   Test1   1234
2   Test2   1235
3   Test3   1236


Excel:
Date   ID
2/1/11 1
2/1/11 2
2/1/11 3

Я хочу иметь возможность извлекать из Excel (надеюсь, без написания какого-либо дополнительного кода как такового - может быть, это просто ODBC-соединение Excel или SQL-запрос с запросом. Таким образом, мои данные в итоге оказались бы в документе Excel:

Excel:
Date   ID  Name    Phone 
2/1/11 1   Test1   1234
2/1/11 2   Test2   1235
2/1/11 3   Test3   1236

Я не уверен, что объясняю себя достаточно ясно ...

Я использую Excel 2007, и у меня тоже где-то 2010. SQL - это SQL Server 2000.

Спасибо!

Ответы [ 2 ]

5 голосов
/ 16 февраля 2011

ADO, я боюсь.

Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL As String
Dim s As String
Dim i As Integer, j As Integer

''This is not the best way to refer to the workbook
''you want, but it is very convenient for notes
''It is probably best to use the name of the workbook.

strFile = ActiveWorkbook.FullName

''Note that if HDR=No, F1,F2 etc are used for column names,
''if HDR=Yes, the names in the first row of the range
''can be used.
''This is the Jet 4 connection string, you can get more
''here : http://www.connectionstrings.com/excel

strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _
    & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"

''Late binding, so no reference is needed

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")


cn.Open strCon

strSQL = "SELECT * " _
       & "FROM [Sheet1$] a " _
       & "LEFT JOIN " _
       & "[ODBC;Driver={SQL Server Native Client 10.0};" _
       & "Server=servername;Database=test;" _
       & "Trusted_Connection=yes].tbl b " _
       & "ON a.[Id]=b.[Id] "

rs.Open strSQL, cn, 3, 3


''Pick a suitable empty worksheet for the results
Worksheets("Sheet3").Cells(2, 1).CopyFromRecordset rs

''Tidy up
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
0 голосов
/ 16 февраля 2011

Если нет веских причин не делать этого в коде, вы должны просто использовать код вместо sql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...