VBA每日一练(22),VBA 的 scripting 类库 (scrrun.dll) 和 fso 详细学习

 

1 scripting类库 (scrrun.dll)

Scripting类库中有三个可以直接使用NEW关键字实例化的类,第一个就是常用的字典,第三个是FSO。

这个介绍的挺好

https://www.cnblogs.com/zzstone/p/5530707.html

 

1.1scripting类库有多少东西?

  • scripting.dictionary
  • scripting.filesystemobject
  • scripting.encoder
  • scripting.Files
  • scripting.\

 

1.2 scripting.filesystemobject

  • 前期绑定:比较像oo语言。先要引用类库文件scrrun.dll,写代码的时候有智能提示。
  • dim fso as new scripting.filesystemobject
  • 后期绑定:不需要引用类库文件,但没有智能提示。 如果程序发给别人用,就要用后期绑定方式。
  • dim fso as object
  • set fso = createobject("scripting.filesystemobject")
'声明方式1
'后期绑定:不需要引用类库文件,但没有智能提示。
'         如果程序发给别人用,就要用后期绑定方式。
 
Dim dic2 As Object
Dim fso2 As Object
Dim enc2 As Object


Set dic2 = CreateObject("scripting.dictionary")
Set fso2 = CreateObject("scripting.filesystemobject")
Set enc2 = CreateObject("scripting.encoder")



'声明方式2,比较像oo语言
'前期绑定:先要引用类库文件scrrun.dll,写代码的时候有智能提示。

Dim dic1 As New scripting.dictionary
Dim fso1 As New scripting.filesystemobject
Dim enc1 As New scripting.encoder


'scripting类库有多少东西?
'scripting.dictionary
'scripting.filesystemobject
'scripting.encoder
'scripting.files
'scripting.

 

2 textsteam对象实用属性和方法  

textsteam对象(fso 经常用的也是 textsteam 对象) 

  • createtextfile
  • opentextfile
  • 方法    
  • 读取:Read,ReadAll,ReadLine
  • 写入:Write,WriteLine,WriteBlankLines
  • 属性    
  • AtEndOfLine:        文件指针正好在行尾标记,则返回TRUE
  •  AtEndOfStream:   文件指针在文件末尾,则返回TRUE
  • Line:                      返回一个 TextStream 文件中的当前行号。
  • Column:                   返回 TextStream 文件中当前字符位置的列号。

 

3 fso 文件系统对象object----filesystemobject

fso是微软新增的功能,就是现在VBA里生成一个 文件对象

  • fso=createobject("scripting.filesystemobject")
  • dict=createobject("scripting.dictionary")

 

3.1 fso的子对象

  • fso.drive
  • fso.folder
  • fso.file
  • fso
  • textsteam   主要是对文件进行读写io操作

 

 

 

3.2FSO的局限性

  • 局限性1:不能直接筛多个文件,只能先筛文件夹
  • 正确fso.getfile()
  • 错误fso.getfiles()
  • 间接实现  fso.getfolder() .files ,完美解决

 

  • 局限性2:很方便查所有文件数,但是不方便查某一类型的文件个数
  •  fso.getfolder("").files.count

 

3.3 过程或函数末,记得释放对象变量,set fso=nothing

 

 

3.4 官方 msdn的doc能找到  很多 textsteam (如fso)的方法

https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/readline-method

 

 

3.5 fso.的很多方法测试   (部分不好用,部分未测试)

    fso. 对象下有很多方法

Sub richardliu2()
Dim fso
Dim b1, b3, b4

Set fso = CreateObject("scripting.filesystemobject")
a1 = fso.getdrive("C:\")
a2 = fso.getdrivename("C:\")
a3 = fso.getbasename("C:\Users\Administrator\Desktop\test102.TXT")
a4 = fso.getextensionname("C:\Users\Administrator\Desktop\test102.TXT")
a5 = fso.getabsolutepathname("C:\Users\Administrator\Desktop\test102.TXT")

Set b1 = fso.getfile("C:\Users\Administrator\Desktop\test102.TXT")
b2 = fso.getfilename("C:\Users\Administrator\Desktop\test102.TXT")
Set b3 = fso.getfolder("C:\Users\Administrator\Desktop")
'Set b4 = fso.getspecialfolder("C:\Users\Administrator")
b5 = fso.getparentfoldername("C:\Users\Administrator\Desktop\test102.TXT")
'b6 = fso.getptempname

Debug.Print a1
Debug.Print a2
Debug.Print a3
Debug.Print a4
Debug.Print a5
Debug.Print

Debug.Print b1
Debug.Print b2
Debug.Print b3
'Debug.Print b4
Debug.Print b5
'Debug.Print b6


End Sub

 

fso的对象

  • 文件夹
  • fso.bulidpath()
  • fso.createfolder()
  • fso.copyfolder()
  • fso.movefolder()
  • fso.deletefolder()

 

  • fso.folderexist()
  • fso.driveexist()
  • fso.fileexist()

 

  • 文件
  • fso.createtextfile
  • fso.opentextfile
  • fso.copyfile()
  • fso.movefile()
  • fso.deletefile()

 

fso.createtextfile

fso.opentextfile

 

 

folder对象

  • folder.copy()
  • folder.move()
  • folder.delete()
  • folder.createtextfile()

 

处理文件的方法

  • file.OpenAsTextStream()
  • object.OpenAsTextStream([iomode, [format]])
  • file.copy()
  • file.move()
  • file.delete()

 

TextStream 对象

 

处理文本文件的方法  object--file

  • object.read
  • object.readline
  • object.readall
  • object.skip
  • object.skipline
  • object.write
  • object.writeline
  • object.writeblankline
  • object.close

 

 

3.6 FSO很多方法和属性

fso.getfile

fso.getfilename

fso.getExtensionName

fso.getBasename

https://blog.csdn.net/hezudao25/article/details/40819669

https://blog.csdn.net/yuelenglingxi/article/details/6528108

https://baijiahao.baidu.com/s?id=1637364844505511630&wfr=spider&for=pc

 

 

变量调用
getfso=fso.DriveExists("g:\") '判断指定硬盘驱动器是否存在
getfso=fso.GetDrive("c:") '创建自定义的FSO驱动器对象
getfso=fso.GetDriveName("c:\网络程序员伴侣") '返回文件夹的所在盘符
Set getfso=fso.Drives '创建FSO驱动器集合对象,多配合for each i in 
getfso语句进行穷尽操作,支持所有[驱动器对象属性],并具有Count和Item属性
 
Set fso=Nothing '释放fso变量与FSO组件的连接资源
</script>
 
驱动器对象操作
<script language=vbs>
on error resume next
Set fso=CreateObject("Scripting.FileSystemObject") '使FSO组件可以被fso变量调用
getfso=fso.GetDrive("c:").FileSystem '返回驱动器对象的文件系统类型
getfso=fso.GetDrive("c:").DriveType '返回驱动器对象的驱动器类型,返回值范围0-5
getfso=fso.GetDrive("c:").DriveLetter '返回驱动器对象的字母
getfso=fso.GetDrive("c:").IsReady '返回指定驱动器是否准备好或是否损坏
getfso=fso.GetDrive("c:").SerialNumber '返回驱动器对象的唯一十进制卷标序号
getfso=fso.GetDrive("c:").ShareName '返回驱动器对象的网络共享名
getfso=fso.GetDrive("c:").VolumeName '返回驱动器对象的卷标名,同时也可以设置其卷标名
getfso=fso.GetDrive("c:").Path '返回驱动器的实际路径,如c:\则返回c:
getfso=fso.GetDrive("c:").RootFolder '返回驱动器对象的跟文件夹
getfso=fso.GetDrive("c:").AvailableSpace'返回驱动器对象的可用容量大小
getfso=fso.GetDrive("c:").FreeSpace '返回驱动器对象的剩余空间大小
getfso=fso.GetDrive("c:").TotalSize '返回驱动器对象的总空间容量大小
 
Set fso=Nothing '释放fso变量与FSO组件的连接资源
</script>
 
系统文件夹操作
<script language=vbs>
on error resume next
Set fso=CreateObject("Scripting.FileSystemObject") '使FSO组件可以被fso变量调用
getfso=fso.GetFolder("c:\") '创建自定义的FSO文件夹对象
getfso=fso.FolderExists("e:\网络程序员伴侣") '判断指定文件夹是否存在
getfso=fso.GettempName '随机返回WINDOW产生在temp文件夹中的临时文件
getfso=fso.GetparentFolderName("e:\网络程序员伴侣") '返回指定文件夹的父文件夹
fso.CreateFolder "c:\windows\新创建的文件夹路径及名称"
fso.MoveFolder "c:\windows\许移动或改名的文件夹","c:\windows\移动路径和新的文件夹名"
fso.DeleteFolder "c:\windows\要删除的目录名",false/true
fso.CopyFolder "c:\windows\须复制的目录名","c:\windows\得到付值内容的目录名",false/true
Set getfso=fso.Folders '创建FSO文件夹集合对象,多配合for each i in getfso语句进行穷尽操作,支持所有[文件夹对象属性],并具有Count和Item属性,具有AddFolders方法
Set getfso=fso.Files '创建FSO文件夹内文件集合对象,多配合for each i in getfso语句进行穷尽操作,支持所有[文件对象属性],并具有Count和Item属性
Set fso=Nothing '释放fso变量与FSO组件的连接资源</script>
 
文件夹对象操作
<script language=vbs>
on error resume next
Set fso=CreateObject("Scripting.FileSystemObject") '使FSO组件可以被fso变量调用
getfso=fso.GetFolder("c:\windows").Name '返回文件夹的名字,这里返回WINDOW
getfso=fso.GetFolder("c:\windows").ShortName '返回文件夹[8.3]格式的名称
getfso=fso.GetFolder("c:\windows").Attributes '返回文件夹的属性,可返回0,1,2,4,8,16,32,64,128
getfso=fso.GetFolder("c:\windows").Size '返回文件夹(包括子文件夹)内文件占用空间大小
getfso=fso.GetFolder("c:\windows").Type '返回文件夹类型信息
getfso=fso.GetFolder("c:\windows").Path '返回文件夹的真实路径
getfso=fso.GetFolder("c:\windows").ShortPath '返回文件夹[8.3]格式的路径
getfso=fso.GetFolder("c:\windows").Drive '返回文件夹所在驱动器
getfso=fso.GetFolder("c:\windows").Files.count '返回文件夹包含的所有文件对象集合
getfso=fso.GetFolder("c:\windows").SubFolders.count '返回文件夹包含的所有子文件夹的对象集合
getfso=fso.GetFolder("c:\windows").ParentFolder '返回文件夹的父文件夹对象
getfso=fso.GetFolder("c:\windows").IsRootFolder '返回文件夹是否为跟文件夹,是返回true否返回false
getfso=fso.GetFolder("c:\windows").DateCreated '返回文件夹的最初创建时间
getfso=fso.GetFolder("c:\windows").DateLastAccessed '返回文件夹最后一次访问时间
getfso=fso.GetFolder("c:\windows").DateLastModified '返回文件夹最近修改的时间
fso.GetFolder("c:\windows").CreateTextFile "新建的文件名及后缀",true/false,true/false
fso.GetFolder("c:\windows\要删除的目录名").Delete true
fso.GetFolder("c:\windows\要移动改名的目录名").Move "文件夹将要移动到的路径及自定义文件夹名称"
fso.GetFolder("c:\windows\旧目录").Copy "复制到路径",true/false '在指定路径付值此文件夹,true=覆盖,false相反
Set fso=Nothing '释放fso变量与FSO组件的连接资源</script>
 
系统文件操作
<script language=vbs>
on error resume next
Set fso=CreateObject("Scripting.FileSystemObject") '使FSO组件可以被fso变量调用
getfso=fso.GetFile("c:\windows\help.html") '得到文件完整路径
getfso=fso.GetFileName("c:\windows\help.html") '得到文件名称和后缀
getfso=fso.GetExtensionName("c:\windows\help.html") '得到文件的文件类型(后缀),不含小数点
getfso=fso.FileExists("c:\windows\文件名.html") '判断文件是否存在
fso.MoveFile "要移动及改名的原文件路径","移动到某路径及自定义新文件名"
fso.DeleteFile "c:\windows\要删除的文件所在路径",false/true
fso.CopyFile "c:\windows\须复制的旧文件.txt","c:\windows\复制后的文件名.jpg",false/true
fso.OpenTextFile "c:\windows\desktop\要打开操作的文件名称.txt",1/2/8,true/false,0/-1/-2 'ForReading=1=只读方式,ForWriting=2=可写方式,ForAppending=8=追加方式.true=如果打开的文件不存在则创建该文件.TristateFalse=0=以系统默认方式打开,TristateTrue=-1=以Unicode格式打开文件,TristateUseDefaule=-2=以ASCLL格式打开文件(缺剩值)
fso.CreateTextFile "c:\windows\desktop\新建的文件名称.txt",false/true,false/true '前者true覆盖以存在同名文件,后者为true新文件将以Unicode方式创建,反之=结果相反
Set fso=Nothing '释放fso变量与FSO组件的连接资源
</script>
 
文件对象操作
<script language=vbs>
on error resume next
Set fso=CreateObject("Scripting.FileSystemObject") '使FSO组件可以被fso变量调用
getfso=fso.GetFile("c:\windows\笔记本.txt").Name '返回文件对象的名称包含后缀
getfso=fso.GetFile("c:\windows\笔记本.txt").ShortName '返回文件对象的[8.3]名称包含后缀
getfso=fso.GetFile("c:\windows\笔记本.txt").Attributes '返回文件对象的属性,可返回0,1,2,4,8,16,32,64,128
getfso=fso.GetFile("c:\windows\笔记本.txt").Size '返回文件对象的大小
getfso=fso.GetFile("c:\windows\笔记本.txt").Type '返回文件对象的类型
getfso=fso.GetFile("c:\windows\笔记本.txt").Path '返回文件对象的完整路径
getfso=fso.GetFile("c:\windows\笔记本.txt").ShortPath '返回文件对象的[8.3]的完整路径
getfso=fso.GetFile("c:\windows\笔记本.txt").Drive '返回此文件对象所在的驱动器
getfso=fso.GetFile("c:\windows\笔记本.txt").ParentFolder '返回文件对象所在的文件夹
getfso=fso.GetFile("c:\windows\笔记本.txt").DateCreated '返回文件对象的创建日期
getfso=fso.GetFile("c:\windows\笔记本.txt").DateLastAccessed '返回文件对象的最后访问日期
getfso=fso.GetFile("c:\windows\笔记本.txt").DateLastModified '返回文件对象的最后修改时间
fso.GetFile("c:\windows\笔记本.txt").Copy "复制到的路径和文件名",true/false
fso.GetFile("c:\windows\笔记本.txt").Delete true
fso.GetFile("c:\windows\笔记本.txt").Move "移动到的路径及自定义文件名
Set fso=Nothing '释放fso变量与FSO组件的连接资源
</script>
 
文件对象读写操作
<script language=vbs>
on error resume next
Set fso=CreateObject("Scripting.FileSystemObject") '使FSO组件可以被fso变量调用
set link1=fso.GetFile("c:\windows\笔记本.txt").OpenAsTextStream(1/2/8,0/-1/-2)
open1=link1.AtendOfline '判断文件指针是否以在行的末尾
open2=link1.AtendOfstream '判断文件指针是否一再文件的末尾
open3=link1.Column '返回当前字符所在文件的列号
open4=link1.Line '返回当前字符所在文件的行号
open5=link1.Read(10) '读取文件中指定数量的字符
open6=link1.ReadAll '读取文件中所有的字符
open7=link1.ReadLine '读取文件中一行中含有的字符
open8=link1.Write "字符串" '将自定字符串或字符串变量写入文件
open9=link1.WriteLine "字符" '将自定字符+一个换行符写入文件
open10=link1.WriteBlankLines 10 '将指定数量的换行符写入文件
open11=link1.Skip 10 '使文件指针跳过指定数量的字符
open12=link1.SkipLine '使文件指针跳到下一行
link1.Close '文件操作完毕,销毁文件对象指针

 

 

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值