Excel实例下载
  VBA  应用教程
    数据库SQL知识
设为首页
利用ADO格式化读取TXT文本文件到Excel中
作者:bengdeng | 来源:Excel吧 | 时间:2011-03-23 | 阅读权限:游客 | 会员币:0 | 【

今天在回答一个网友的问题时,本来想利用ADO读取txt文本文件的内容,无意中找到利用schema.ini 文件格式化读取的方法,便整理于此。

Sub 按格式读取文本文件到Excel中()
'*****************************************************************
'时间:2011-3-23
'作者:bengdeng
'功能:利用ADO格式化读取TxT文本文件到Excel中
'发布:http://www.excelba.com
'******************************************************************

Dim rst As Object
Dim sCnn As String
Dim sSql As String
Dim sTxt As String
Dim sPath As String
Dim Free As Long

sTxt = "示例.txt" '文本文件名称
sPath = ThisWorkbook.Path & "\" '文件所在文件夹路径
Free = FreeFile
Open sPath & "schema.ini" For Output As #Free '创建 schema.ini 文件

'schema.ini 文件说明
'Schema.ini用于提供文本文件中记录的构架信息,在读取文本文件时优先扫描该文件,并按此架构读取文本文件
'在Schema.ini文件中可以预置文件名称,标题,字段分隔符,字段性质等信息
'所以我们可以创建它 , 然后KILL它, 当然也可以不删
'Schema.ini用于提供文本文件中记录的构架信息。每个 Schema.ini 项都用于指定表的五个特征之一:
    '1 文本文件名
    '2 文件格式
    '3 字段名?字段长度?字段类型
    '4 字符集
    '5 特别数据类型转换
'具体举例如下
'  ColNameHeader=True '第一行包含字段名 False为否
'  Format = TabDelimited       '是 文本文件 字段以 TAB分隔符
'  Format = CSVDelimited       '是 文本文件 字段以 CSV文件形式
'  Format = Delimited(*)       '是 文本文件 字段以 * 分隔,*可为其它字符,如|
'  Col1=Id Integer Width 4     'Id 是长度为 10 的整形字段
'  Col2=Name Text Width 10     'Name 是长度为 10 的文本字段
'  MaxScanRows = 0             '扫描整个文件
'  CharacterSet = ANSI         '指定字符集, CharacterSet 项有两个选择:ANSI | OEM
'  特别数据类型转换            '特别数据类型转换主要是定义比如日期?货币型数据如何转换或者如何显示的

sStr = "[" & sTxt & "]" & _
        vbNewLine & "ColNameHeader = True" & _
        vbNewLine & "Format = Delimited( )"    '并注入文本文件自定义分隔符等 格式内容( ) 是自定义空一格的意思
Print #Free, sStr
Close #Free

sCnn = "Driver={Microsoft Text Driver (*.txt; *.csv)};" & "DBQ=" & sPath & "\;Persist Security Info=False"
'也可以用下面这一句
'sCnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sPath & ";Extended Properties=Text;"

sSql = "SELECT * FROM " & sTxt
Set rst = CreateObject("ADODB.Recordset")
rst.Open sSql, sCnn, 0, 1, 1
If Not rst.EOF Then
    ActiveSheet.Cells.ClearContents
    ActiveSheet.Range("A1").CopyFromRecordset rst
Else
    MsgBox "无记录返回!", vbCritical, "http://www.excelba.com"
End If
rst.Close
Set rst = Nothing

Kill sPath & "schema.ini"
End Sub

文章录入:admin | 浏览次数:
相关评论(以下网友评论只代表其个人观点,不代表Excel吧的观点或立场)
相关信息

关于本站 | 留言本站 | 友情连接 | 后台管理
Copyright © 2005 - 2008 Excel吧 Inc. All Rights Reserved.
HxCms Ver9.0  闽ICP备06001689号
关闭此窗口