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
版权声明:本文标题:VBA操作文本文件 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1702791884h431095.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论