Excel电子表格 – 在单元格上执行Oracle查询的最佳方法
我有一个Excel Spreadsheeet。
有一个单元格包含一个连接的名字和姓氏(不要问为什么),例如:
细胞A2 BLOGGSJOE
在这个单元格上,我想运行下面的SQL并将其输出到单元格A3,A4和A5
SELECT i.id, i.forename, i.surname FROM individual i WHERE UPPER(REPLACE('" & A2 & "', ' ', '')) = UPPER(REPLACE(i.surname|| i.forename, ' ', '')) AND NVL(i.ind_efface, 'N') = 'N'
任何想法如何在每个单元格上执行oracle查询并返回结果?
我在Excel中启用了一个oracle数据源连接,不知道现在该怎么做。
这是一个愚蠢的做法,你能推荐一个更好的方法吗?
非常感谢! 我缺乏这种types的东西的必要经验! 🙂
编辑:我知道,我可以只写一个简单的ruby / php / python /任何脚本循环通过Excel电子表格(或csv文件),然后执行查询等,但我认为可能有一个快捷方式在Excel本身。
Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim sql As String Set cn = New ADODB.Connection cn.ConnectionString = 'Get one from http://www.connectionstrings.com/oracle 'eg. "Driver={Oracle in OraHome92};Dbq=tns;Uid=uid;Pwd=pwd;" cn.Open sql = Your SQL Set rs = cn.Execute(sql) for loop or something to paste records rs.Close cn.Close Set rs = Nothing Set cn = Nothing
如果您正确格式化电子表格,则可以将rs分配给Variant,然后将该variables分配给一个范围,而不是循环遍历它。
编辑
用你当前的SQL,你需要遍历每个单元格并查询数据库,然后将结果保存到A3:A5。 编辑2 ,类似的东西:
Private Function GetRow(user As String) As Variant Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim sql As String Dim v As Variant Set cn = New ADODB.Connection cn.ConnectionString = "Driver={Oracle in OraHome92};Dbq=tns;Uid=uid;Pwd=pwd;" cn.Open sql = "SELECT i.id, i.forename, i.surname FROM individual i WHERE UPPER(REPLACE('" & user & "', ' ', '')) = UPPER(REPLACE(i.surname|| i.forename, ' ', '')) AND NVL(i.ind_efface, 'N') = 'N'" Set rs = cn.Execute(sql) v = rs.GetRows() GetRow = v rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Function Sub a() Dim user As String For i = 2 To x user = ActiveSheet.Cells(i, 1).Value GetRow (user) ActiveSheet.Cells(i, 2).Value = GetRow(0) ActiveSheet.Cells(i, 3).Value = GetRow(1) ActiveSheet.Cells(i, 4).Value = GetRow(2) Next End Sub
请注意,我使用了不同的单元格,你想要的和GetRow是2D不是1D,但是我很难写出来,没有实际的电子表格/数据库访问
请在这里查看我的答案。 使用该代码,您可以调用您的Oracle查询(recursion或不recursion)。 我认为这会更快:
- 首先build立要检索的项目列表(BLOGGSJOE,JOEBAR,JUSTINCASE)
- 然后使用IN(BLOGGSJOE,JOEBAR,JUSTINCASE)作为标准在单独的列表中检索您的Oracle数据
- 最后在Excel中对新下载的列表进行查找