三、利用FileSystemObject对象来处理文件

FileSystemObject对象模型,是微软提供的专门用来访问计算机文件系统的,具有大量的属性、方法和事件。其使用面向对象的“object.method”语法来处理文件夹和文件,使用起来十分方便(需Office 2000以后版本)。FileSystemObject并不是VBA的一部分,它是以一个COM组件的形式提供的。因此,要使用先要创建FileSystemObject对象。

FileSystemObject对象模型包含了下面的对象和集合:

·FileSystemObject 主对象,包含用来创建、删除和获得有关信息,以及用来操作驱动器、文件夹和文件的方法和属性。

·Drive   对象,包含用来获得信息的方法和属性,这些信息是关于连接在系统上的驱动器的,如有多少可用空间等。驱动器不一定是硬盘,也可以是CD-ROM、U盘甚至是通过网络在逻辑上连接的硬盘(如公司里部门共享的服务器网络硬盘)。

·Drives  集合,提供驱动器的列表,这些驱动器以实物或在逻辑上与系统相连接。Drives集合包括所有驱动器,与类型无关。

·File   对象,包含用来创建、删除或移动文件的方法和属性。

·Files   集合,提供包含在文件夹内的所有文件的列表。

·Folder  对象,包含用来创建、删除或移动文件夹的方法和属性。

·Folders  集合,提供包含在文件夹内的所有文件夹的列表。

·TextStream  对象,用来读写文本文件。

(一)准备工作

要使用FileSystemObject对象,先要创建它。创建FileSystemObject对象要使用CreatObject函数。CreateObject 函数用来创建并返回一个对 ActiveX 对象的引用。

语法:CreateObject(class,[servername])
class 是要创建的应用程序名称和类。
servername 要在其上创建对象的网络服务器名称。(如果要在远程计算机上创建对象才用)

class 参数使用 appname.objecttype 这种语法,包括以下部分:

appname 必需的;提供该对象的应用程序名。
objecttype 必需的;待创建对象的类型或类。

因此,我们用下面的代码创建FileSystemObject对象:

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")

Scripting是类型库的名称,FileSystemObject就是要创建的对象的名字。

同样我们可以创建Dictionary 对象如下:
Dim d
Set d = CreateObject("Scripting.Dictionary")

(二)FileSystemObject对象的方法

FileSystemObject对象模型中有些功能是重复的,如可用FileSystemObject对象的CpoyFile方法,也可用File对象的Copy方法来复制文件。下面先介绍FileSystemObject对象的方法。

1、GetDrive 方法

语法:object.GetDrive drivespec

drivespec参数可以是一个驱动器字符(c)、一个驱动器字符加一个冒号(c:)、一个驱动器字符加冒号和路径分隔符(c:\)或任何网络共享的说明(\\computer2\share1)。

作用:返回一个与指定路径中的驱动器相对应的 Drive 对象。

示例:
Dim d
Set d = fso.GetDrive("D:")  '变量d就代表了驱动器D对象
如果 drivespec 不符合任何一种可以接受的形式或者不存在,则发生一个错误。

注意:为简洁,示例中都假定fso是已经创建的FileSystemObject对象

2、GetDriveName 方法

语法:object.GetDriveName(path)

作用:返回一个包含指定路径的驱动器名字的字符串。

示例:
Debug.Print fso.GetDriveName("c:\test.txt")  '立即窗口显示"c:"

3、GetExtensionName 方法

语法:object.GetExtensionName(path)

作用:返回一个包含路径中最后部件扩展名的字符串。

示例:
Debug.Print fso.GetExtensionName("c:\test.txt")  '立即窗口显示"txt"

4、GetBaseName 方法

语法:object.GetBaseName(path)

作用:返回一个包含路径中最后部件的基本名字(去掉任何文件扩展名)的字符串。

示例:
Debug.Print fso.GetBaseName("c:\abc\test.txt")  '立即窗口显示"test"

5、GetAbsolutePathName 方法

语法:object.GetAbsolutePathName(pathspec)

作用:从提供的路径说明中返回一个完整、明确的路径。

示例:
如果pathspec为空字符串"",则返回当前路径。假设当前路径为C:\Documents and Settings\yc\My Documents

Debug.Print fs.GetAbsolutePathName("")  '显示C:\Documents and Settings\yc\My Documents

Debug.Print fs.GetAbsolutePathName("c:..") '显示C:\Documents and Settings\yc,即上层目录

Debug.Print fs.GetAbsolutePathName("abc") '显示C:\Documents and Settings\yc\My Documents\abc

Debug.Print fs.GetAbsolutePathName("c:\test.txt") '显示C:\test.txt

6、GetFile 方法

语法:object.GetFile(filespec)

作用:返回一个和指定路径中文件相对应的 File 对象。

示例:
Dim f
Set f = fso.GetFile("c:\test.txt")  '变量f就代表了文件test.txt对象
注意:如果指定的文件不存在,则发生一个错误。

7、GetFileName 方法

语法:object.GetFileName(pathspec)

作用:返回指定路径中的最后部件,该路径不是驱动器说明的一部分。

示例:
Debug.Print fso.GetFileName("c:\abc\test.txt")  '立即窗口显示"test.txt"

8、GetFolder 方法

语法:object.GetFolder(folderspec)

作用:返回一个和指定路径中文件夹相对应的 Folder 对象。

示例:
Dim fd
Set fd = fso.GetFolder("c:\windows")  '变量f就代表了文件夹windows对象
注意:如果指定的文件夹不存在,则发生一个错误。

9、GetSpecialFolder 方法

语法:object.GetSpecialFolder(folderspec)

作用:返回指定的特殊文件夹。

说明:
folderspec 参数可为任何的下列值:

WindowsFolder   0   Windows 文件夹,包含由 Windows 操作系统安装的文件。
SystemFolder   1   系统文件夹,包含库、字体、设备驱动程序。
TemporaryFolder  2   Temp 文件夹,用于存储临时文件。它的路径在 TMP 环境变量中。

10、GetParentFolderName 方法

语法:object.GetParentFolderName(path)

作用:返回一个包含指定路径最后部件父文件夹名字的字符串。

示例:
Debug.Print fso.GetParentFolderName("c:\tmp\test.txt")  '显示"c:\tmp"

11、GetTempName 方法

语法:object.GetTempName

作用:返回一个随机产生的临时文件或文件夹的名字,该名字在执行需要临时文件或文件夹的操作时有用。

说明:GetTempName 方法不产生一个文件,它仅提供一个临时文件名字,该名字可被 CreateTextFile 用于创建一个文件。

示例:
Debug.Print fso.GetTempName   '显示"radB0208.tmp",每次都会变。

12、BuildPath 方法

语法:object.BuildPath(path, name)

作用:追加一个名字到一个已经存在的路径。

示例:
Debug.Print fso.BuildPath("c:\tmp", "abc") '显示"c:\tmp\abc"

13、CreateFolder 方法

语法:object.CreateFolder(foldername)

作用:创建一个文件夹。

注意:如果指定的文件夹已经存在,则发生一个错误。

示例:
fso.CreateFolder("c:\myfolder")   '在C盘创建一个myfolder文件夹

14、CopyFolder 方法

语法:object.CopyFolder source, destination[, overwrite]
source 必需的。指明一个或多个被复制文件夹的字符串文件夹说明,可以包括通配符。 
destination 必需的。指明 source 中被复制文件夹和子文件夹的接受端的字符串,不允许有通配符。
overwrite 可选的。Boolean 值,它表示已存在的文件夹是否被覆盖。如果为 True,文件被覆盖。如果为 False,文件不被覆盖。缺省值为 True。

作用:复制一个文件夹到另一个地方。

说明:
 ① 通配符仅可用于 source 参数的最后一个路径部件。

例如:fso.CopyFolder "c:\mydocuments\letters\*", "c:\tempfolder\" 这是可以的。
但不能这样:fso.CopyFolder "c:\mydocuments\*\*", "c:\tempfolder\"

② 如果 source 包含通配符或 destination 以路径分隔符(\)为结尾,则认为 destination 是一个已存在的文件夹,在其中复制相匹配的文件夹和子文件夹。否则认为 destination 是一个要创建的文件夹的名字。

例如:fso.copyfolder "c:\tmp", "f:\abc\"
如果F盘没有abc文件夹,将发生错误。如果存在,可看到abc文件夹里有tmp文件夹。
假如写成这样:fso.copyfolder "c:\tmp", "f:\abc"
此时若abc不存在,将创建abc文件夹,且将tmp文件夹里的内容复制到abc文件夹里,而不是tmp文件夹,只有abc是一个已经存在的文件夹时,才复制整个tmp文件夹到abc文件夹里。

③如果 destination 是一个已存在的文件,则发生一个错误。

④如果 destination 是一个目录,它将尝试复制文件夹和它所有的内容。如果一个包含在 source 的文件已在 destination 中存在,当 overwrite 为 False 时发生一个错误,否则它将尝试覆盖这个文件。

⑤如果 destination 是一个只读目录,当尝试去复制一个已存在的只读文件到此目录并且 overwrite为 False 时,则发生一个错误。

⑥如果 source 不存在或使用的通配符不能和任何文件夹匹配,也发生一个错误。

⑦CopyFolder 方法停止在它遇到的第一个错误上,之前所做的操作是不会消失的,所以要注意。

15、MoveFolder 方法

语法:object.MoveFolder source, destination
参数与CopyFolder的前两个一样。

作用:将一个或多个文件夹从一个地方移动到另一个地方。

说明:
①只有在操作系统支持的情况下,这个方法才允许文件夹在卷之间移动。Windows是不允许的,将C盘的文件夹移到D盘是不行的。

②如果 source 包含通配符或 destination 以路径分隔符 (\) 为结尾,则认为 destination 指定了一个已存在的文件夹,在此文件夹中移动相匹配的文件。否则,认为 destination 是一个要创建的目标文件夹名字。这点与CopyFolder是一样的。

③如果 destination 是一个已存在的文件,则发生一个错误。

④如果 destination 是一个目录,则发生一个错误。
例如:
fso.movefolder "c:\tmp", "c:"  '发生错误。

⑤如果 source 不存在或使用的通配符不能和任何文件夹匹配,也发生一个错误。

⑥MoveFolder 方法停止在它遇到的第一个错误上。不要尝试回卷在错误发生前所做的任何改变。

16、DeleteFolder 方法

语法:object.DeleteFolder folderspec[, force]

folderspec 必需的。要删除的文件夹的名字。 Folderspec 可以在最后的路径部件中包含通配符。
force 可选的。Boolean 值,如果要删除具有只读属性设置的文件夹,其值为 True,如果值为 False (缺省),则不能删除具有只读属性设置的文件夹。

作用:删除一个指定的文件夹和它的内容。

说明:如果没有发现相匹配的文件夹,则发生一个错误。DeleteFolder 方法停止在它遇到的第一个错误上,不要尝试回卷或撤消错误发生前所做的任何改变。

示例:
fso.DeleteFolder("c:\tmp")

17、FolderExists 方法

语法:object.FolderExists(folderspec)

作用:如果指定的文件夹存在返回 True,不存在返回 False。

18、DriveExists 方法

语法:object.DriveExists(drivespec)

作用:如果指定的驱动器存在,返回 True,如果不存在返回 False。

19、FileExists 方法

语法:object.FileExists(filespec)

作用:如果指定的文件存在,返回 True,若不存在,则返回 False。

20、CreateTextFile 方法

语法:object.CreateTextFile(filename[, overwrite[, unicode]])

overwrite 可选的。Boolean 值,表示一个已存在文件是否可被覆盖。如果可被覆盖其值为 True,其值为 False 时不能覆盖。如果它被省略,则已存在文件不能覆盖。

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

作用:创建一个指定的文件名并且返回一个用于该文件读写的 TextStream 对象。

示例:
Dim f
Set f = fso.CreateTextFile("c:\testfile.txt", True)

21、OpenTextFile 方法

语法:object.OpenTextFile(filename[, iomode[, create[, format]]])

作用:打开一个指定的文件并返回一个 TextStream 对象,该对象可用于对文件进行读、写、追加操作。

说明:
·iomode 参数可为下面设置值中的任何值:

ForReading    1  打开一个只读文件,不能对此文件进行写操作。
ForWriting    2  打开一个用于写操作的文件。如果和此文件同名的文件已存在,则覆盖以前内容。
ForAppending    8  打开一个文件并写到文件的尾部。

注意:在VBA帮助里是没有ForWriting的,其实是有的,VBA帮助也是有错误的。另外,这些常数在使用前要先声明,或者直接用数值。

·create 可选的,它表示如果指定的 filename 不存在是否可以创建一个新文件。如果创建新文件,其值为 True。若不创建文件其值为 False。缺省值为 False。

·Format 参数可为下面设置值中的任何值:

TristateUseDefault   –2   使用系统缺省打开文件。
TristateTrue    –1   以 Unicode 格式打开文件。
TristateFalse      0   以 ASCII 格式打开文件。

示例:
Dim f
Set f = fso.OpenTextFile("c:\testfile.txt", 2, True)
或者:
Const ForWriting = 2
Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
这两者功能是一样的,一个声明了常量,一个直接用数值。都是在C盘创建文件testfile.txt(如不存在),或以写的方式打开(如存在)。

22、CopyFile 方法

语法:object.CopyFile source, destination[, overwrite]

作用:把一个或多个文件从一个地方复制到另一个地方。

说明:需要注意的地方与CopyFolder是完全类似的。

示例:
fso.copyfile "c:\testfile.txt", "f:\abc\"  '若abc不存在则出错。
fso.copyfile "c:\testfile.txt", "f:\abc"  '若abc不存在则复制testfile.txt到F盘文件名变为abc,若abc存在,出错,因为是一个目录。

23、MoveFile 方法

语法:object.MoveFile source, destination

作用:将一个或多个文件从一个地方移动到另一个地方。

说明:需要注意的地方与MoveFolder是完全类似的。

24、DeleteFile 方法

语法:object.DeleteFile filespec[, force]

作用:删除一个指定的文件。

说明:force 可选的。如果要删除具有只读属性设置的文件,其值为 True。如果其值为 False (缺省),则不能删除具有只读属性设置的文件。

【转】Excel-VBA操作文件四大方法之三的更多相关文章

  1. HTML5 关于本地操作文件的方法

    由于传统 b/s 开发出于安全性的考虑,浏览器对于本地文件的操作权限几乎没有,用户想要操作一个文件基本都是采用先上传到服务器, 再回显给浏览器供用户编辑,裁剪等的方法,这种方式虽然可行,但其对于服务器 ...

  2. Excel VBA 操作 Word(入门篇)

    原文地址 本文的对象是:有一定Excel VBA基础,对Word VBA还没有什么认识,想在Excel中通过VBA操作Word还有困难的人.   一.新建Word引用 需要首先创建一个对 Word A ...

  3. EXCEL VBA 选择文件对话框

    Sub XXX() Dim arr() arr = Application.GetOpenFilename("所有支付文件 (*.xls;*.xlsx;*.csv),*.xls;*.xlsx ...

  4. Windows编程中各种操作文件的方法

    windows编程中文件操作有以下几种常见方法:1.C语言中文件操作.2.C++语言中的文件操作.3.Win32 API函数文件操作.4.MFC CFile类文件操作.5.MFC CFileDialo ...

  5. PHP中常用操作文件的方法

    文件夹的创建: mkdir系统函数,第一个参数是路径,第二个参数是权限,第三个参数是是否递归创建,默认权限是0777最大权限,在windows下没有所谓的权限,在linux下可以设置权限,如果目录存在 ...

  6. C#操作文件夹及文件的方法的使用

    本文收集了目前最为常用的C#经典操作文件的方法,具体内容如下:C#追加.拷贝.删除.移动文件.创建目录.递归删除文件夹及文件.指定文件夹下面的所有内容copy到目标文件夹下面.指定文件夹下面的所有内容 ...

  7. Excel VBA基础教程

    https://www.w3cschool.cn/excelvba/excelvba-basics.html Excel VBA语言基础 VBA语言的基础认识 详解VBA编程是什么 excel处理录制 ...

  8. Excel vba:批量生成超链接,添加边框,移动sheet等

    Excel vba 操作 批量生成sheet目录并添加超链接 Sub Add_Sheets_Link() 'Worksheets(5)为清单目录页 '在sheet页上生成sheet页名字并超链接 To ...

  9. 记录python接口自动化测试--把操作excel文件的方法封装起来(第五目)

    前面补充了如何来操作excel文件,这次把如何获取excel文件的sheet对象.行数.单元格数据的方法进行封装,方便后面调用 handle_excel.py# coding:utf-8 import ...

随机推荐

  1. @Autowired和@Resource注解的区别

    @Autowired注解是按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false.如果我们想使用按名称装配,可以结合@Qualifier注 ...

  2. Asp.Net MVC Identity 2.2.1 使用技巧(六)

    使用用户管理器之角色管理 一.建立模型,这里我们其实在之前的技巧(五)已经建好了. 二.建立控制器RolesAdminController 1.在controllers文件夹上点右键>添加> ...

  3. 重装win7系统的过程

    U盘重装系统准备工作: 1.下载一个制作U盘系统的软件,随便哪个都行,把U盘变成系统盘 2.下载镜像,将镜像copy到系统盘内即可(无需解压) 3.进入BIOS系统,将boot进行设置,将U盘设置为第 ...

  4. [原]Ubuntu 下安装apache+PHP

    1.安装apache2 sudo apt-get install apache2 运行如下命令重启:sudo /etc/init.d/apache2 restart 在浏览器里输入http://loc ...

  5. cheerio数据抓取

    很多语言都能写个爬虫抓取数据,js自然也可以,使用cheerio可以支持css检索,较快捷的获取需要的数据.首先,先把node.js给安装了.可到官网下载.安装好node.js后,使用npm安装che ...

  6. Socket Tools的使用

    1.启动工具 Socket Tools.exe , 分享:链接:http://pan.baidu.com/s/1dFiuEHz 密码:1sv9 2.在本地创建TCP Server,自动启动监听 3.在 ...

  7. 跨路径读取cookie

    同域下,即使设置了cookie的路径还是能将不同路径cookie读出来. 1.在/ctf/day3/ 目录设置一个cookie 2.其他目录下是不能访问这个cookie的 3.通过iframe可以实现 ...

  8. vue项目 webpack打包后,图片路径是绝对路径

    vue项目,使用webpack打包,虽然在全局把路径改成了相对的路径,但是图片引用的路径还是异常的,解决办法如下: 1.config文件夹下index.js中: assetsPublicPath:&q ...

  9. R中的apply族函数和多线程计算

    一.apply族函数 1.apply  应用于矩阵和数组 # apply # 1代表行,2代表列 # create a matrix of 10 rows x 2 columns m <- ma ...

  10. [LuoguP1064][Noip2006]金明的预算方案

    金明的预算方案(Link) 题目描述 现在有\(M\)个物品,每一个物品有一个钱数和重要度,并且有一个\(Q\),如果\(Q = 0\),那么该物件可以单独购买,当\(Q != 0\)时,表示若要购买 ...