SQL查询对Excel电子表格

在针对Excel SpreadSheet发布SQL Query时遇到问题。 我有一个Excel-2007的电子表格,大约有1行和2列的行。 第一列(cid)和第二列(公司)。 我想从sheet(tab1)where company =“spider”中获取所有行。 我正在使用下面的代码。 它给我的结果,但只有从前1400行。 如果我在1400行之后有公司=“蜘蛛”,它不能通过下面的代码获取它。 需要帮助。

Sub main() On Error GoTo ErrHandler Set cn = CreateObject("ADODB.Connection") With cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Data Source=" & ThisWorkbook.FullName & "; Extended Properties=Excel 8.0" .Open End With Set ObjRes = cn.Execute("Select cid,company from [tab1$] where [company]= 'spider'") result.Range("A:B").Clear result.Range("A1").CopyFromRecordset ObjRes cn.Close Set cn = Nothing Set ObjRes = Nothing Exit Sub ErrHandler: cn.Close MsgBox "dataerror" End Sub 

请提供宝贵的意见/解决scheme来解决这个问题。 让我知道你需要任何额外的细节。

谢谢。

这在Excel 2007中适用于我:

 Sub sofMain20021767() Dim cn, ObjRes Dim result On Error GoTo ErrHandler Set cn = CreateObject("ADODB.Connection") With cn .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0" _ & "; Data Source=" & ThisWorkbook.FullName _ & "; Extended Properties=""Excel 12.0 Macro;HDR=YES""" .Open End With ' Set ObjRes = cn.Execute("SELECT cid,company FROM [tab1$] WHERE [company]= 'spider'") ' ' result.Range("A:B").Clear ' result.Range("A1").CopyFromRecordset ObjRes Range("D:E").Clear Range("D1").CopyFromRecordset ObjRes ' cn.Close Set cn = Nothing Set ObjRes = Nothing Exit Sub ErrHandler: MsgBox Err.Description Set cn = Nothing End Sub 

!!!小心,结果复制到范围(“D:E”),擦除这两列的旧数据。

在这里输入图像说明

在这里输入图像说明

如图所示,在logging2和logging2838(即>行1400)上find“蜘蛛”。

Extended Properties =“Excel 12.0 Macro; HDR = YES”定义了一个带有Macro的Excel文档,即一个MyDoc.xlsm文件,HDR = Yes表示第一行是标题,即列名。 对于其他格式的Excel文档,请参阅参考资料 。

或者你可以遍历logging集:

  ' '... ' Range("D:E").Clear ' 'Range("D1").CopyFromRecordset ObjRes ' ' ' now we traverse the recordset: ' Dim i i = 1 ' Do While (Not ObjRes.EOF) Range("D" & i).Value = ObjRes(0).Value Range("E" & i).Value = ObjRes(1).Value i = i + 1 ObjRes.MoveNext Loop ' '... '