提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
在VBA中有时会需要操作一些普通文件和文件夹。存在着很多操作的方法。这里介绍一种较为全面且简单的操作方法。FileSystemObject ---- 文件系统对象。
一、创建FileSystemObject对象
FileSystemObject对象位于Scripting脚本内,定位于
C:\Windows\SysWOW64\scrrun.dll
后期绑定:
Set fso = CreateObject("Scripting.FileSystemObject")
二、使用FileSystemObject操作文件
1.打开文件:OpentTextFile()方法
调用FileSystemObject.OpentTextFile()方法将打开指定的文件,并返回该文件的TextStream(文本流)对象,对象浏览器中写的介绍是:
Function OpenTextFile(FileName As String, [IOMode As IOMode = ForReading], [Create As Boolean = False], [Format As Tristate = TristateFalse]) As TextStream
FileName: 要打开的文件地址。
IOMode:它的同名值IOMode是一个枚举类型对象,代表打开文件的模式。其中:
Const ForReading = 1 // 只读模式
Const ForWriting = 2 // 只写模式,每次以此模式打开后原来的文件都将被新文件完全覆盖。
Const ForAppending = 8 // 可读 + 可续写模式。
Create:文件不存在时是否自动按照所给文件地址创建新文件。默认为false = 否。
Format:它的值Tristate也是枚举对象。指定打开文件时所使用的字符集。有:
Const TristateUseDefault = -2 // 使用系统默认值打开文件。
Const TristateTrue = -1 // 打开该文件为 Unicode。
Const TristateFalse = 0 // 打开该文件为 ASCII。
2.创建文件:CreateTextFile()方法
调用FileSystemObject.CreateTextFile()方法将创建指定的文件,并返回该文件的TextStream(文本流)对象,对象浏览器中写的介绍是:
Function CreateTextFile(FileName As String, [Overwrite As Boolean = True], [Unicode As Boolean = False]) As TextStream
FileName: 要创建的文件地址。
Overwrite:若文件已存在是否覆盖的选项。默认为true = 覆盖已存在文件。
Unicode:创建文件时使用unicode还是ASCII字符集。默认为false = 使用ASCII字符集;true = 使用unicode字符集。
3.操作文本流(TextStream)
使用FileSystemObject操作文件,最终以操作文本流对象(TextStream)的形式实现。
(1).文件指针
TextStream提供一个只读的文件指针,供使用者判断当前文件读取的位置。无论之前对文件进行什么读写操作,对于新打开的文件,文件指针都位于第一个字符前(这将导致始终从第一个字符开始读取),即Column = 1; Line = 1。
TextStream提供了四个只读属性,我们可以通过这四个只读属性很方便的判断文件指针的状态:
Column:返回 TextStream 文件中当前的列号。
Line:返回 TextStream 文件中当前的行号。
AtEndOfLine:如果文件指针紧接在 TextStream 文件的行尾标记(即换行符)之前,则返回 true;否则返回 false。
AtEndOfStream:如果文件指针位于 TextStream 文件的末尾(文件末尾是不存在任何隐藏符号的),则返回 true;否则返回 false。
TextStream提供了两个过程(Sub)来操作文件指针(只能从前往后):
Sub Skip(Characters As Long) // 在读取模式下,文件指针跳过指定数量的字符。(即跳过Characters个字符)
Sub SkipLine() // 在读取模式下,文件指针跳到下一行开头。
通过跳过字符的方式,可以实现单向的移动文件指针。当然,单纯的读取操作,也会单向移动文件指针,这取决于你的需求。
(2).读取文件内容
想要能够读取文件的内容必须以ForReading的模式打开(ForWriting和ForAppending都不行)。这里再重申一遍,每次打开文件,都将从头开始读取。
TextStream提供了三个方法来读取文件:
Function Read(Characters As Long) As String // 读取指定数量的字符并返回结果字符串。
Function ReadLine() As String // 读取一行并返回结果字符串。
Function ReadAll() As String // 读取整个文件并返回结果字符串。
(3).写入文件内容
想要写入内容,必须以ForWriting 或 ForAppending的模式打开文件。在这两种模式下写入相同的内容将产生不同的效果。
ForWriting:先清空文件中原有的所有内容,在重新写入指定的内容。相当于用新文件替换了旧文件。文件指针位于文件开头。
ForAppending:从文件的末尾开始写入内容。文件指针位于文件末尾。由于无法前移文件指针,在这个模式下仍然不支持文件指针的自主移动。只能始终处于文件末尾。
因为在这两种写模式下,文件指针始终处于文件末尾。因此,四个只读属性中AtEndOfLine,AtEndOfStream将不再具有获取的意义,将无法获得值。而Line和Column则可以正常获得值。
TextStream提供了三个过程(Sub)来向文件中写入内容:
Sub Write(Text As String) // 将指定的文本(Text)写入文件
Sub WriteBlankLines(Lines As Long) // 将指定数量的换行字符写入文件。(即写入Lines个换行符或者说写入Lines个空行)
Sub WriteLine([Text As String]) // 将指定的文本,在末尾加上一个换行符后写入文件。