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)。 我认为这会更快:

  1. 首先build立要检索的项目列表(BLOGGSJOE,JOEBAR,JUSTINCASE)
  2. 然后使用IN(BLOGGSJOE,JOEBAR,JUSTINCASE)作为标准在单独的列表中检索您的Oracle数据
  3. 最后在Excel中对新下载的列表进行查找