运行 SQL 来自电子表格单元格内部的查询
Running SQL queries from inside spreadsheet cells
我有一个 Excel spreadsheet,其中几个 SQL 查询存储在不同的单元格中,我想在 SQL 服务器上执行这些查询以生成一个new sheet 其中每个单元格都是原始 spreadsheet 的查询结果。这背后的想法是在生成结果时保留 sheet 格式(条件格式等)。
像这样:
输入点差sheet:
Database
Information A
Information B
DB 1
SQL Query 1
SQL Query 2
DB 2
SQL Query 3
SQL Query 4
输出点差sheet:
Database
Information A
Information B
DB 1
Result of Query 1
Result of Query 2
DB 2
Result of Query 3
Result of Query 4
在研究该主题的过程中,我无法找到关于如何做到这一点的想法,但我相信使用 VBA 或某种脚本语言应该可以做到。
关于我应该如何处理这个问题有什么想法吗?
我已经使用 Power Query 完成了它。这比我想象的要容易得多。特别感谢 Jacek Wróbel 在评论中提供的想法。
顺便说一句,你可以做这样的事情。
Sub ADOExcelSQLServer()
Dim Cn As ADODB.Connection
Dim Server_Name As String
Dim Database_Name As String
Dim User_ID As String
Dim Password As String
Dim SQLStr As String
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Server_Name = "EXCEL-PC\SQLEXPRESS" ' Enter your server name here
Database_Name = "Northwnd" ' Enter your database name here
User_ID = "" ' enter your user ID here
Password = "" ' Enter your password here
SQLStr = "SELECT * FROM Orders" ' Enter your SQL here
Set Cn = New ADODB.Connection
Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & Database_Name & _
";Uid=" & User_ID & ";Pwd=" & Password & ";"
rs.Open SQLStr, Cn, adOpenStatic
With Worksheets("Sheet1").Range("A1:Z500")
.ClearContents
.CopyFromRecordset rs
End With
rs.Close
Set rs = Nothing
Cn.Close
Set Cn = Nothing
End Sub
它位于 VBA 模块中。当然,您可以将 SQL 存储在 Excel 单元格中,然后执行此操作...
SQLStr = Worksheets("Sheet1").Range("A1").Value
此外,您可以遍历一堆单元格和 运行 一堆 SQL 作业。
您自己的想象力是您唯一的限制。
我有一个 Excel spreadsheet,其中几个 SQL 查询存储在不同的单元格中,我想在 SQL 服务器上执行这些查询以生成一个new sheet 其中每个单元格都是原始 spreadsheet 的查询结果。这背后的想法是在生成结果时保留 sheet 格式(条件格式等)。
像这样:
输入点差sheet:
Database | Information A | Information B |
---|---|---|
DB 1 | SQL Query 1 | SQL Query 2 |
DB 2 | SQL Query 3 | SQL Query 4 |
输出点差sheet:
Database | Information A | Information B |
---|---|---|
DB 1 | Result of Query 1 | Result of Query 2 |
DB 2 | Result of Query 3 | Result of Query 4 |
在研究该主题的过程中,我无法找到关于如何做到这一点的想法,但我相信使用 VBA 或某种脚本语言应该可以做到。
关于我应该如何处理这个问题有什么想法吗?
我已经使用 Power Query 完成了它。这比我想象的要容易得多。特别感谢 Jacek Wróbel 在评论中提供的想法。
顺便说一句,你可以做这样的事情。
Sub ADOExcelSQLServer()
Dim Cn As ADODB.Connection
Dim Server_Name As String
Dim Database_Name As String
Dim User_ID As String
Dim Password As String
Dim SQLStr As String
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Server_Name = "EXCEL-PC\SQLEXPRESS" ' Enter your server name here
Database_Name = "Northwnd" ' Enter your database name here
User_ID = "" ' enter your user ID here
Password = "" ' Enter your password here
SQLStr = "SELECT * FROM Orders" ' Enter your SQL here
Set Cn = New ADODB.Connection
Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & Database_Name & _
";Uid=" & User_ID & ";Pwd=" & Password & ";"
rs.Open SQLStr, Cn, adOpenStatic
With Worksheets("Sheet1").Range("A1:Z500")
.ClearContents
.CopyFromRecordset rs
End With
rs.Close
Set rs = Nothing
Cn.Close
Set Cn = Nothing
End Sub
它位于 VBA 模块中。当然,您可以将 SQL 存储在 Excel 单元格中,然后执行此操作...
SQLStr = Worksheets("Sheet1").Range("A1").Value
此外,您可以遍历一堆单元格和 运行 一堆 SQL 作业。
您自己的想象力是您唯一的限制。