|
楼主 |
发表于 2009-6-2 07:11
|
显示全部楼层
第10部分 文件操作
技巧170 导入文本文件
在实际应用中,我们经常从软件中将数据导出为文本文件,在需要将这些文本文件导入到Excel中时可以使用以下的方法。
170-1 使用查询表导入
在Excel VBA中可以使用Add方法新建查询表后导入文本文件,如下面的代码所示。- #001 Sub AddQuery()
- #002 Sheet1.UsedRange.ClearContents
- #003 With Sheet1.QueryTables.Add( _
- #004 Connection:="TEXT;" & ThisWorkbook.Path & "\工资表.txt", _
- #005 Destination:=Range("A1"))
- #006 .TextFilePlatform = 936
- #007 .TextFileCommaDelimiter = True
- #008 .Refresh
- #009 End With
- #010 End Sub
复制代码 代码解析:
AddQuery过程使用QueryTable对象的Add方法新建查询表后将文本文件“工资表.txt”的内容导入到工作表中。
应用于QueryTable对象的Add方法新建一个查询表,返回QueryTable对象,该对象代表新建的查询表,语法如下:
expression.Add(Connection, Destination, Sql)
参数expression是必需的,返回一个QueryTables对象。
参数Connection是必需的,查询表的数据源。如果数据源是文本文件,是“TEXT;<文本文件路径和名称>”形式的字符串,其他数据源请参阅帮助。
参数Destination是必需的,Range类型,查询表目标区域左上角单元格用于放置生成的查询表的区域。目标区域必须在包含expression 指定的QueryTables对象的工作表上。
参数Sql是可选的,在ODBC数据源上运行的SQL查询字符串,当将QueryTable对象、文本文件、或是ADO或DAO Recordset对象指定为数据源时不能使用该参数。
第3行到第5行代码在工作表中建立对位于同一目录中的“工资表.txt”文本文件的查询,并将查询结果放置到工作表中。
第6行代码设置导入的文本文件的原始格式,QueryTables对象的TextFilePlatform属性返回或设置正向查询表中导入的文本文件的原始格式,默认值是在“文本导入向导”的“文件原始格式”选项中的当前设置。
第7行代码设置文本文件导入查询表中时,是以逗号作为分隔符。
第8行代码使用Refresh方法更新外部数据区域,应用于QueryTable对象的Refresh方法更新外部数据区域,语法如下:
expression.Refresh(BackgroundQuery)
参数expression是必需的,返回一个QueryTable对象。
参数BackgroundQuery是可选的的,只用于基于SQL查询结果的QueryTable。
170-2 使用Open 语句导入
使用Open语句输入文本文件,如下面的代码所示。- #001 Sub OpenText()
- #002 Dim Filename As String
- #003 Dim myText As String
- #004 Dim mArr() As String
- #005 Dim i As Integer
- #006 Dim j As Integer
- #007 Filename = ThisWorkbook.Path & "\工资表.txt"
- #008 j = 1
- #009 Sheet1.UsedRange.ClearContents
- #010 Open Filename For Input As #1
- #011 Do While Not EOF(1)
- #012 Line Input #1, myText
- #013 mArr = Split(myText, ",")
- #014 For i = 0 To UBound(mArr)
- #015 Sheet1.Cells(j, i + 1) = mArr(i)
- #016 Next
- #017 j = j + 1
- #018 Loop
- #019 Close #1
- #020 End Sub
复制代码 代码解析:
OpenText过程使用Open语句将文本“工资表.txt”的内容输入到工作表中。
第10行代码使用Open语句打开文本文件以完成对文本文件的输入。Open语句能够对文件输入/输出(I/O),语法如下:。
Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]
Pathname是必需的,指定文件名,该文件名可能还包括目录、文件夹及驱动器。
mode是必需的,指定文件方式,有Append、Binary、Input、Output、或Random方式。如果未指定方式,则以Random访问方式打开文件。
Access是可选的,说明打开的文件可以进行的操作,有Read、Write、或Read Write操作。
lock是可选的,说明限定于其它进程打开的文件的操作,有Shared、Lock Read、Lock Write、和Lock Read Write操作。
filenumber是必需的,一个有效的文件号,范围在 1 到 511 之间。使用FreeFile函数可得到下一个可用的文件号。
reclength是可选的,小于或等于 32,767(字节)的一个数。对于用随机访问方式打开的文件,该值就是记录长度。对于顺序文件,该值就是缓冲字符数。
第11行代码使用Do...Loop 语句重复执行第12行到第17行代码,直到文本文件的结尾。EOF函数返回一个Integer,它返回Boolean值True,表明已经到达为Random或顺序Input打开的文件结尾,语法如下:
EOF(filenumber)
参数filenumber是必需的,是一个Integer,包含任何有效的文件号。
第12行代码使用Line Input # 语句读入一行数据并将其赋予变量myText。Line Input # 语句从已打开的顺序文件中读出一行并将它分配给String变量,语法如下:
Line Input #filenumber, varname
Filenumber是必需的,任何有效的文件号。
varnamer是必需的,有效的Variant或String变量名。
第13行代码使用Split函数按逗号作为分隔符分开这行字符,赋值数组mArr。关于Split函数请参阅技巧169-2。
第14行到第16行代码将数组mArr循环赋值给单元格,请参阅技巧169-1。
第19行代码关闭文本文件。Close语句关闭Open语句所打开的输入/输出 (I/O) 文件,语法如下:
Close [filenumberlist]
参数filenumberlist是可选的,为一个或多个文件号,如省略则将关闭所有由Open语句打开的活动文件。
[ 本帖最后由 yuanzhuping 于 2009-6-4 07:48 编辑 ] |
|