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 ' '... '