使用ADO获取excel的行号

时间:2013-04-18 15:15:10

标签: sql excel-vba vbscript adodb vba

我们正试图根据soome condtion获取特定记录集的行号。请考虑下表

Name    Id
abc     1
cde     2
efg     3

现在,如何获取员工“cde”的行号或记录集号(根据下面的代码我们需要得到结果为2)。对此有任何帮助。

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001
strSource="C:\Test.xls"
strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strSource          & ";Extended Properties=""Excel 8.0;HDR=Yes;"";"  
Set conn = CreateObject("ADODB.Connection")   
Set objRecordSet = CreateObject("ADODB.Recordset")
conn.Open strConnection 
objRecordset.Open "Select Name FROM [sheet1$] Where Id = 2", conn, adOpenStatic,     adLockOptimistic, adCmdText
msgbox objRecordset.GetString
conn.Close 
Set conn = Nothing

1 个答案:

答案 0 :(得分:1)

最好的方法是在Excel文件中放置一个与行号具有相同数据的列。然后查询该列。这是一个万无一失的解决方案。

但是,如果由于某种原因你不能这样做,那么试试这个:

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H1
Dim RowNumber 
Dim SqlStmt 

strSource = "C:\Temp\Test.xls"
strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strSource & ";Extended Properties=""Excel 8.0;HDR=Yes;"";"
Set conn = CreateObject("ADODB.Connection")
Set objRecordset = CreateObject("ADODB.Recordset")
conn.Open strConnection

SqlStmt = "Select Name, Id FROM [sheet1$]"      ''-- you can optimize this query if your Id is in ascending order. e.g. "Select Name, Id FROM [sheet1$] Where Id <= 4"
objRecordset.Open SqlStmt, conn, adOpenStatic, adLockOptimistic, adCmdText
objRecordset.Find "Id = 4"
RowNumber = objRecordset!ID + 1  ''-- +1 for Header row.
conn.Close
Set conn = Nothing

MsgBox RowNumber