VBA

ado使用schema.ini提取文本文件数据

为什么ado有时候要采用schema.ini来自定义数据格式呢?我们先来了解一下什么是schema.ini。

chema.ini (文本文件驱动程序),它包含的条目可以覆盖 Windows 注册表中默认的文本驱动程序设置。 这种文件通常用于指定如何处理特定的文本文件格式,包括定义字段分隔符、文本限定符、列的数据类型等。通过使用 Schema.ini 文件,用户可以自定义文本文件的解析方式,以便在应用程序中正确地读取和处理这些文件。 当文本表包含 DateTime、Currency 或 Decimal 数据时,或者想要更好地控制表中数据的处理时,应使用 Schema.ini 文件。

schema.ini里面的写法示例如下:

[行业板块.txt]
format=TabDelimited
COL1=F1 Text
COL2=F2 Text
COL3=F3 Text
COL4=F4 Text

我们可以看到第一行是文本文件名称(要带上中括号).第二行是每行数据的分割符号。后面就是列信息。使用列号 (Coln) 选项来指定表中的字段,该选项对于字符分隔的文件是可选的,对于固定长度的文件是必需的。看上面的例子列信息的写法为:Coln=列字段名称 字段类型 [width] [#].例子里面没有限定字符的个数,这是可选的。更多具体写法可以参考:https://learn.microsoft.com/zh-cn/sql/odbc/microsoft/schema-ini-file-text-file-driver?view=azuresqldb-current

下面来个示例。利用ado批量提取文本文件数据到excel.通过代码生成schema.ini,达到自动化的目的。

Sub 多个txt批量转换成excel()
Dim Cnn As Object, Rst As Object, SQL$, Fn$, str$, rng As Range
Set Cnn = CreateObject("ADODB.Connection")
Application.ScreenUpdating = False
Cells.ClearContents
If Val(Application.Version) < 12 Then

Cnn.Open "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & _
";Extended Properties='text;HDR=no;FMT=Delimited';Persist Security Info=False"

Else

Cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & _
";Extended Properties='text;HDR=no;FMT=Delimited';Persist Security Info=False"

End If

Fn = ThisWorkbook.Path & "\*.txt": str = Dir(Fn)

Do While Len(str)
Open ThisWorkbook.Path & "\schema.ini" For Output As #1 '写入文件信息到schema.ini文件里
Print #1, "[" & str & "]"
Print #1, "format=TabDelimited"
Print #1, "COL1=F1 Text"
Print #1, "COL2=F2 Text"
Print #1, "COL3=F3 Text"
Print #1, "COL4=F4 Text"
Close
SQL = "Select  * from " & str
Set Rst = Cnn.Execute(SQL)
If Len([a2]) = 0 Then Set rng = [a2] Else Set rng = Cells(Rows.Count, 1).End(3).Offset(1)
rng.CopyFromRecordset Rst
Rst.Close
str = Dir()
Loop
Cnn.Close
Application.ScreenUpdating = True
Set Cnn = Nothing
Set Rst = Nothing
End Sub

Views: 33

Hi, I’m fan2006

发表回复