admin 管理员组

文章数量: 887021


2023年12月17日发(作者:安卓软件开发毕业设计)

转载]VBA使用FileSystemObject将读取或写入文本文件

(2011-04-28 08:47:34)

转载▼

标签:

转载

原文地址:VBA使用FileSystemObject将读取或写入文本文件作者:添成

VBA使用FileSystemObject将读取或写入文本文件

原文链接:

/?viewspace-662523

/?viewspace-662526

/wengene/archive/2010/08/12/

在网上找到一样的版本,所以就都列在这里

***********************************************************************************

*************************** 正 文 **********************************************

***********************************************************************************

有时,我们需要将一个文本文件中的数据读取到Excel单元格中,或将指定单元格的内容按指定的格式导出到文本文件中,这时,我们就需要使用stemObject对象来进行操作。在接下来的几篇里我们介绍如何使用FileSystemObject对象操作文本文件的。工欲善其事,必先利其器,那么我们就先花几篇文章来详细介绍下FileSystemObject对象。

一、如何创建FileSystemObject对象

在VBA中,是通过CreateObject函数返回FileSystemObject对象。

示例:

Dim fso As Object

Set fso=CreateObject("stemObject")

二、FileSystemObject主要方法介绍

1、CreateTextFile方法:用于创建一个指定文件名,并返回一个可操作的TextStream对象。

语法:TextFile(filename[,overwrite[,unicode]])

参数

object

filename

overwrite

unicode

说明

必需的。为一个FileSystemObject对象的名字

必需的,一个带路径的字符串表达式,为创建的文件

可选的。Boolean值,如果为True表示覆盖已存在的文件,False表示不能覆盖。默认值为False。

可选的。Boolean值,表示文件是作为一个Unicode文件创建的还是作为一个ASCII文件创建的。如果为True则表示作为Unicode文件创建,False表示作为ASCII文件创建。默认值为False。

示例1:在C:FSOTest中创建一个名为testFile的文本文件,并写入一行“CreateTextFile Test”:

Sub CreateFile()

Dim sFile As Object, FSO As Object

Set FSO = CreateObject("stemObject")

Set sFile = TextFile("C:",True)

ine ("CreateTextFile Test")

Set sFile = Nothing

Set FSO = Nothing

End Sub

2、DeleteFile方法:用于删除一个指定的文件。如果指定的文件不存在,则返回一个错误信息。

语法:File(filespec[,force])

参数

object

filespec

force

说明

必需的。为一个FileSystemObject对象

必需的。要删除文件的名字。可以在最后的路径部件中包含通配符

可选的。Boolean值,如果要删除具有只读属性设置的文件,则为True。如果不能删除具有只读属性设置的文件,则为False。默认值为False

示例2:删除示例1中创建的文本文件。

Sub DeleteFile()

Dim fso As Object

Set fso = CreateObject("stemObject")

File ("C:")

End Sub

3、FileExists方法:判断指定的文件是否存在。如果存在,则返回True,若不存在,则返回False

语法:ists(filespec)

参数

object

filespec

说明

必需的。为一个FileSystemObject对象

必需的。要确定是否存在的文件名。如果认为文件不在当前文件夹中,必须提供一个带完整的路径说明。

示例3:判断“C:FSOTest”中是否存在文件“”:

Sub FileExist()

Dim fso As Object, blnExist As Boolean

Set fso = CreateObject("stemObject")

blnExist = ists("C:")

MsgBox blnExist

End Sub

4、OpenTextFile方法:打开一个指定的文件并返回一个TextStream对象,该对象可能于对文件进行读操作或追加操作。

语法:xtFile(filename[,iomode[,create[,format]]])

参数

object

filename

iomode

create

说明

必需的。始终是一个 FileSystemObject 的名字

必需的。为一个文件名,包含完整路径说明

可选的。表示输入/输出方式。可为两个常数之一:ForReading或 ForAppending。

可选的。Boolean 值,它表示如果指定的

filename 不存在是否可以创建一个新文件。如果创建新文件,其值为 True。若不创建文件其值为 False。缺省值为 False。

format 可选的。三种 Tristate 值之一,用于指示打开文件的格式。如果省略,则文件以 ASCII 格式打开。

参数iomode可以设置为以下值:

常数

ForReading

ForWriting

ForAppending

1

2

8

说明

打开一个只读文件。不能对此文件进行写操作

打开一个可读写操作的文件,并删除原有文本内容

打开一个文件并写到文件的尾部

参数format可以设置为以下值:

常数

TristateUseDefault

TristateTrue

TristateFalse

-2

-1

0

说明

使用系统缺省打开文件

以Unicode格式打开文件

以ASCII格式打开文件

示例4:本例说明了使用OpenTextFile方法打开文件,并添加文字“OpenTextFile Test”:

Sub OpenTextFile()

Dim fso As Object, sFile As Object

Const ForReading = 1, ForWriting = 2, ForAppending = 8, TristateFalse

= 0

Set fso = CreateObject("stemObject")

Set sFile = xtFile("C:", ForAppending,

TristateFalse)

"OpenTextFile Test"

Set fso = Nothing

Set sFile = Nothing

End Sub

在上一节“VBA使用FileSystemObject将读取或写入文本文件(一)”中我们详细介绍了如何创建一个FileSystemObject对象及其对象。那么,在这一节里,将详细介绍FileSystemObject对象在创建或打开文本文件后返回的TextStream对象的一些属性及方法。

三、FileSystemObject对象返回的TextStream对象的属性及方法说明:

创建TextStream对象示例:

Dim sFile As Object, fso As Object

Set fso = CreateObject("stemObject")

Set sFile = TextFile("C:")

示例中的sFile便为TextStream对象。

(一)TextStream属性:

1、Line属性:只读属性,返回一个TextStream文件中的当前行号。文件初次打开后,在写任何东西之彰,Line的值为1。

语法:

2、AtEndOfStream属性:只读属性,如果文件指针在TextStream文件末尾,则返回True;否则返回False。

语法:fStream

3、AtEndOfLine属性:只读属性,如果文件指针在TextStream文件行尾标记的前面,则返回True;否则返回False。

语法:fLine

(二)TextStream方法:

1、WriteLine方法:写入一个指定的字符和换行符到一个TextStream文件中。

语法:ine([string])

Object:必需的。表示一个TextStream对象的名字。

string:可选的。要写入文件的正文。如果省略,一个换行符被写入文件中。

示例:打开一个文本文件并在文本文件中写入一些字符。

Sub WriteLine()

Dim fso As Object, sFile As Object

Const ForReading = 1, ForWriting = 2, ForAppending = 8, TristateFalse =

0

Set fso = CreateObject("stemObject")

Set sFile = xtFile("C:", ForAppending,

TristateFalse)

ine "WriteLine Test"

Set fso = Nothing

Set sFile = Nothing

End Sub

2、Write方法:写一个指定的字符串到一个TextStream文件中。指定的字符串被写入到文件中,在每个字符串之间没有插入空格或字符。使用WriteLine方法写入一个换行符或一个以换行符为结尾的字符串。

语法:(string)

object:必需的。为一个TextStream对象的名字。

string:必需的。要写到文件中的字符串。

示例:下列代码将一个字符串写入到文本文件中,并实现与WriteLine方法相同的效果,即加入空格或换行符。

Sub WriteTest()

Dim fso As Object, sFile As Object

Const ForReading = 1, ForWriting = 2, ForAppending = 8, TristateFalse =

0

Set fso = CreateObject("stemObject")

Set sFile = xtFile("C:", ForAppending,

TristateFalse)

"Write Test" & vbTab & vbCrLf '同时加入一个Tab位及一个换行符

Set fso = Nothing

Set sFile = Nothing

End Sub

3、ReadLine方法:从一个TextStream文件读取一整行(到换行符但不包括换行符)并返回得到的字符串。

语法:string=ne

string:返回的字符串。

object:一个TextStream对象。

示例:打开一个文本文件,并读取内容。

Sub ReadLine()

Dim fso As Object, sFile As Object

Const ForReading = 1, ForWriting = 2, ForAppending = 8, TristateFalse =

0

Set fso = CreateObject("stemObject")

Set sFile = xtFile("C:", ForReading)

MsgBox ne

Set fso = Nothing

Set sFile = Nothing

End Sub

4、Read方法:从一个TextStream文件中读取指定数量的字符并返回得到的字符串。

语法:(characters)

object:必需的。表示为一个TextStream对象的名字。

characters:必需的。从文件中要读取的字符数。

示例:从一个打开的文本文件中读取5个字符。

Sub ReadTest()

Dim fso As Object, sFile As Object

Const ForReading = 1, ForWriting = 2, ForAppending = 8, TristateFalse =

0

Set fso = CreateObject("stemObject")

Set sFile = xtFile("C:", ForReading)

MsgBox (5)

Set fso = Nothing

Set sFile = Nothing

End Sub

5、Close方法:关闭一个打开的TextStream文件。

语法:

6、WriteBlankLines方法:写入指定数量的换行符到一个TextStream文件中。

语法:lankLines(lines)

object:必需的。指一个TextStream对象的名字。

lines:必需的。要写入的换行符数量。

示例:在一个打开的文本文件中写入两个空行。

Sub WriteBlankLines()

Dim fso As Object, sFile As Object

Const ForReading = 1, ForWriting = 2, ForAppending = 8, TristateFalse =

0

Set fso = CreateObject("stemObject")

Set sFile = xtFile("C:", ForAppending)

lankLines (2)

Set fso = Nothing

Set sFile = Nothing

End Sub

7、SkipLine方法:当读一个TextStream文件时跳过下一行。跳过一个是指读取放弃一行中的所有字符,一直到并包括该行的换行符。如果读的文件没有打开,则产生一个错误。

语法:ne

8、Skip方法:当读一个TextStream文件时跳过指定数量的字符。跳过的字符将不被读取。

语法:(characters)

object:必需的。表示一个TextStream对象的名字。

characters:必需的。当读文件时要跳过的字符的数量。

在上两节中已经详细介绍了FileSystemObject对象的一些属性及方法。那么在这一节里,我们将举例说明如何使用VBA在Excel与文本文件中的导入导出。假设我们有如下数据表及文本文件:

现在要实现在这两个文件中的数据按指定的格式进行导入导出。下面我们就先进行将EXCEL数据表中的内容导出到中,并按图中的格式显示。

一、导出到文本文件的示例代码:

Sub Export2TxtFile()

Dim fso As Object, sFile As Object, blnExist As Boolean

Dim iRow As Integer, FileName As String

Set fso = CreateObject("stemObject") '创建FileSystemObject对象

FileName = "C:" '指定文本文件名

Check_FileExist:

blnExist = ists(FileName) '判断文件是否存在

If blnExist Then

If MsgBox("指定的数据文件已存在,是否覆盖原文件?", _

vbExclamation + vbYesNo, "提示信息") = vbNo Then

'如果不覆盖原文件,则要求指定文件名

FileName = ox("请输入文件名:")

If FileName = "False" Then FileName = & "!$A$1"

FileName = "C:FSOTest" & FileName & ".txt"

GoTo Check_FileExist '再次检查文件是否存在

Else '如果是,则先删除原文件

File (FileName)

End If

End If

Set sFile = TextFile(FileName)

ine ("[" & ("A1").Value & "]") '写入第一行数据

lankLines (1) '写入一个空白行

For iRow = 2 To ("A65536").End(xlUp).Row

'从单元格A2开始读取数据,到数据表结尾,写入到文本文件中

ine ((iRow, 1).Value _

& "|" & (iRow, 2).Value _

& "|" & (iRow, 3).Value _

& "|" & (iRow, 4).Value)

Next iRow

If MsgBox("文件已导出。是否打开该文件?", vbYesNo + vbInformation) =

vbYes Then

Shell (" " & FileName) '打开文本文件

End If

End Sub

二、将文本文件导入到Excel数据表中:

Sub ImportFromTextFile()

Dim fso As Object, sFile As Object, blnExist As Boolean

Dim FileName As String, LineText As Variant, i As Integer, iCol As Integer

Const ForReading = 1

Set fso = CreateObject("stemObject") '创建FileSystemObject对象

FileName = "C:" '指定文本文件名

blnExist = ists(FileName) '判断文件是否存在,如果不存在,则退出过程

If Not blnExist Then MsgBox "文件不存在!": Exit Sub

Set sFile = xtFile(FileName, ForReading) '创建并打开名为sFile的TextStream对象

'读取第一行数据

("A1").Value = Replace(Replace(ne, "[", ""),

"]", "")

ne '跳过第二行的空行

i = 2 '设置输入单元格的起始行号

Do While Not fStream '如果不是文本文件的尾端,则读取数据

LineText = Split(ne, "|") '拆分读取到的数据到数组中

For iCol = LBound(LineText) To UBound(LineText) '从数组中读取数据并写入对应的单元格

(i, iCol + 1).Value = LineText(iCol)

Next iCol

i = i + 1 '滚动到下一个单元格行

Loop

'#这里可以加入设置单元格格式的代码

Set fso = Nothing

Set sFile = Nothing


本文标签: 文件 文本文件 打开