您可以利用 ADO 来查询文本文件,就好像它们是数据库表一样。这允许您编写 SQL 查询以从文本文件中提取数据。如果您愿意,您可以在任何文本文件甚至 .xls 文件中执行此操作。
这样做的代码/过程相当简单。您需要先引用 Microsoft ActiveX Data Objects 2.X 库,然后使用如下内容:
Dim cn as New ADODB.Connection
Dim rs as New ADODB.Recordset
Dim i as Integer
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=C:\SomeFolder;" & _
"Extended Properties=""text; HDR=Yes;FMT=Delimited"""
.Open
With rs
.Open "SELECT * from fileName.txt", cn
'Loop through each row in query
While Not (.EOF Or .BOF)
'Loop through each column in row
For i = 0 to .Fields.Count - 1
Debug.Print .Fields(i).Value 'Print value of field to Immediate Window
Next i
.MoveNext
Wend
.Close
End With
.Close
End With
Set rs = Nothing
Set cn = Nothing
这将遍历您的文本文件并在您的 VBA 即时窗口中显示第一列的值。它还假定您的文件具有标题行。如果没有,那么您需要将ConnectionString 中的HDR更改为No。
该代码将自动尝试并为您推断类型,但如果您遇到无法发现正确类型(例如前导零)的问题,那么您可以为您的文件明确定义模式。重要的是要注意,如果您采用架构路线,那么您的 ConnectionString 参数(如HDR和FMT 将被忽略)。它们将保留注册表中定义的默认设置,除非您在架构定义中覆盖它们。可以在此处找到有关 schema.ini 文件的更多信息:http: //msdn.microsoft.com/en-us/library/windows/desktop/ms709353 (v=vs.85).aspx 。
这是另一个有用的链接:http: //msdn.microsoft.com/en-us/library/ms974559.aspx。这是 Microsoft Scripting Guys 撰写的一篇文章,也是我最初了解该过程的方式。
最后,如果您曾经对 .xls 文件使用此过程,那么您应该知道永远不要查询打开的 .xls 文件。OPEN .xls 文件存在严重的内存泄漏错误(更多信息:http: //support.microsoft.com/default.aspx ?scid=kb;en-us;319998&Product=xlw )。只要您查询 CLOSED .xls 文档,那么您就不应该有任何问题 =D。SQL FROM 子句中的语法有点不同,因为您必须针对特定工作表,但 IIRC 我链接的 Scripting Guys 文章解释了如何做到这一点。