VBA每日一练(3),用VBA打开txt文件的三种方法:workbooks.opentext() , open 语句,fso.opentextfile
经验: 编程确实如李笑来所说,有很多知识前置,所以少年,努力学习吧,除了这个也没啥其他难度。1 比较 三种打开txt文件方法(1)语句直接打开文件,最简单 open filenamefor append as #1(2)对象fso的方法fso.opentextfile()还有 fso.createtextfile()fso...
经验: 编程确实如李笑来所说,有很多知识前置,所以少年,努力学习吧,除了这个也没啥其他难度。
1 比较 三种打开txt文件方法
- (1)语句直接打开文件,最简单 open filename for append as #1
- (2)对象fso的方法 fso.opentextfile() 还有 fso.createtextfile()
- fso是一套通用的 textStream 对象 ,这个对象可以很多方法 .close .read .write等等
- 操作文件,需要先 set 对象变量=fso.opentextfile() 才行
- (3)workbooks 特定对象的快捷方法 workbooks.opentext filename:= 实测,语法很严格,必须是workbooks,
- 实际效果是,新生成一个EXCEL的workbook文件,且打开这个TXT作为第一个激活sheet
2 open相关
我在这里搜了搜 https://docs.microsoft.com/zh-cn/office/vba/Language/Reference/User-Interface-Help/printstatement
2.1 open相关的总结:
- open语句:open filename for append as #1
- open函数,好像VBA并没有
open()函数 - 相关对象.open()方法,各种各样-----对象.openText,FileSystemObject.opentextfile,对象.openXml,对象.openDatabase,比如 workbook.openText
- 属性相关插件addin的属性,isopen
- object.open事件,触发
2.2 open语句
MSDN的DOC解释
2.3 测试过程 open filename for tristate as #1
- open "" for input 是读文件
- open "" for output 是读文件
- open "" for random 或 open "" 也就是默认是random ?不知道为啥要 random...
- 实际写法,经常会 as #1
- open "" for append access write as #1
- open "" for append as #1
从txt中读取全部内容
Sub test_jackma1()
Dim s As String
Open "C:\Users\Administrator\Desktop\test101.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, s
Debug.Print s
Loop
Close #1
End Sub
读取部分内容--读取几行
- 初始位置,应该是取决于 光标位置,
- 如果是新打开的文件,一般就是在文件开头第1行,
- 其他保存过的文件,看关闭时光标最后停留的位置作为下次打开的初始位置?
Sub test_jackma1()
Dim s As String
Open "C:\Users\Administrator\Desktop\test101.txt" For Input As #1
Line Input #1, s
Debug.Print s
Line Input #1, s
Debug.Print s
Line Input #1, s
Debug.Print s
Close #1
End Sub
循环逐行读(没有实现自动读最大行数等)
Sub test_jackma1()
Dim s As String
Open "C:\Users\Administrator\Desktop\test101.txt" For Input As #1
For i = 1 To 10 Step 1
Line Input #1, s
Debug.Print s
Next i
Close #1
End Sub
往里写内容(可以用 write 或 print ?)
Sub test_jackma1()
Dim s As String
Open "C:\Users\Administrator\Desktop\test101.txt" For Append As #1
Write #1,
Write #1, 888
Write #1, 999
Close #1
End Sub
open "" for append 会在最后一行直接追加(可以用 write 或 print ?)
Sub test300()
Open "C:\Users\Administrator\Desktop\test101.txt" For Append As #1
Print #1, "a,b,c"
Close #1
End Sub
open "" for output 会覆盖文件内容
Sub test300()
Open "C:\Users\Administrator\Desktop\test101.txt" For Output As #1
Print #1, "5"
Close #1
End Sub
2.4 open语句的 mode的配置 tristate
- for read 对应0
- for write 对应1
- for append 对应8
- for random 不知道有啥用,反正是不能write,也不能read,我都试过
2.5 open语句的状态的配置 tristate
- access write
- access read
- access read write
- 默认是?
2.6 open语句的共享状态 state
- shared
- locked read
3 open 语句相对应的 close ,write,read (简写 CL WR RE )
3.1 close 相关
- close 语句close #1
- object.close方法
- beforeclose
3.2 write相关
- write 语句
- writeline
- fso.write 不能这样空行
- fso.writeline
- 没有这样的方法 fso.print
Sub jackma2()
Dim fso1, f1
Set fso1 = CreateObject("Scripting.FileSystemObject")
Set f1 = fso1.OpenTextFile("C:\Users\Administrator\Desktop\test101.txt", 8, TristateFalse)
'f1.Write ' write 这样会报错
f1.Writeline 'writeline这样是可以的
f1.Writeline "Hello world!"
'f1.Print "Hello world!" '没有这样的方法 fso.print
f1.Close
End Sub
相关文件操作总结,对于fso对象
- f.close (见上面)
- f.write (见上面)
- f.writeline (见上面)
- f.read
- f.readall
- f.readline
- f.skipline 光标跳到下一行
- f.skip 5 光标往后跳几个字节
Sub jackma2()
Dim fso1, f1
Dim x1
Set fso1 = CreateObject("Scripting.FileSystemObject")
Set f1 = fso1.OpenTextFile("C:\Users\Administrator\Desktop\test101.txt", 1, False)
x1 = f1.readline
Debug.Print x1
f1.Close
End Sub
Sub jackma2()
Dim fso1, f1
Dim x1
Set fso1 = CreateObject("Scripting.FileSystemObject")
Set f1 = fso1.OpenTextFile("C:\Users\Administrator\Desktop\test101.txt", 1, False)
x1 = f1.readline
Debug.Print x1
f1.skipline
x1 = f1.readline
Debug.Print x1
f1.Skip 1
x1 = f1.readline
Debug.Print x1
f1.Close
End Sub
3.3 input相关
- line input 语句
- all input ?
3.4 read 相关
- readall
- readline
3.5 print相关
- 1 之前只知道 debug.print xxx 比 msgbox xxxx 好用
- 2 现在才知道 print可以往文件里写入内容
- print语句的基本语法
- print #1, "" ; "" ; ""
- 微软官方的介绍 https://docs.microsoft.com/zh-cn/office/vba/Language/Reference/User-Interface-Help/printstatement
- print #1, 可以是空行
'这一段是微软的手册的官方介绍
Open "TESTFILE" For Output As #1 ' Open file for output.
Print #1, "This is a test" ' Print text to file.
Print #1, ' Print blank line to file.
Print #1, "Zone 1"; Tab ; "Zone 2" ' Print in two print zones.
Print #1, "Hello" ; " " ; "World" ' Separate strings with space.
Print #1, Spc(5) ; "5 leading spaces " ' Print five leading spaces.
Print #1, Tab(10) ; "Hello" ' Print word at column 10.
4 open作为对象的方法,属性,或事件
4.1 对比 workbooks.opentext 和 fso.opentextfile()
- workbooks.opentext filename:= 实测,语法很严格,必须是workbooks,实际效果是,新生成一个EXCEL的workbook文件,且打开这个TXT作为第一个激活sheet
- fso是一套通用的 textStream 对象 ,这个对象可以很多方法 .close .read .write等等 操作文件,需要先 set 对象变量=fso.opentextfile() 才行
4.2对象.openText 方法
- workbooks.opentext 因为是创建了一个新的excel文件!!!所以只能用workbooks的写法
- Workbooks.OpenText filename:="DATA.TXT", _ dataType:=xlDelimited, tab:=True
- 不支持thisworkbook.opentext 和 activeworkbook.opentext
- 而只支持thisworkbook.saveas 和 activeworkbook.saveas
Sub jackma3()
Workbooks.OpenText Filename:="C:\Users\Administrator\Desktop\test101.txt"
'只能是 workbooks.opentext
'不能是 thisworkbook.opentext 或者 activeworkbook.opentext
End Sub
会生成1个新EXCEL表,也就是所谓的 workbook,同时把这个txt 读入到第一个sheet里,sheet命名,内容都读txt的
4.3 FileSystemObject 对象下的各种方法,其中包括 fso.opentextfile
_Object_参数始终是**TextStream** 对象的名称。
Sub OpenTextFileTest
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile("c:\testfile.txt", ForAppending, TristateFalse)
f.Write "Hello world!"
f.Close
End Sub
FilesystemObject对象的OpenTextFile方法(CreateTextFile也是)
FilesystemObject .OpenTextFile 默认会用系统的编码读取文本,默认一般都是ANSI,想改成中文也正常显示,必须把文本转换成Unicode,同时OpenTextFile方法也设置成Unicode的方法读取。
OpenTextFile方法
该方法可以打开指定的文件并返回一个TextStream对象,可以读取此对象或将其追加到文件中。语法如下:
Object.OpenTextFile(filename[,iomode[,create[,format]]])
OpenTextFile方法的参数说明
- object 必选。应为FileSystemObject对象的名称。
- filename 必选。字符串表达式,指明要打开的文件名称。 (其实是文件完整路径)
- iomode 可选。输入/输出模式,:forReading,forwriting,forAppending 分别代码是 1,2,8
- create 可选。Boolean值,指出当指定的filename不存在时是否能够创建新文件。允许时为True,否则为False,默认False。
- format 可选。三个Tristate值之一,指出以何种格式打开文件。
format默认,或=0,ASC2格式,format=2以系统默认格式打开文件,format=-1,以Unicode格式打开文件- 应该是 false/0 为ASC2模式,而true/1或其他,都是unicode模式
CreateTextFile 方法
写文件默认也不支持中文编码,用ASCII写中文字符的时候可能会报错,也一样要设置CreateTextFile 方法的编码。
FileSystemObject.CreateTextFile(filename[,overwrite[,unicode]])
FolderObject.CreateTextFile(filename[,overwrite[,unicode]])
- filename 必需。需创建文件的名称。
- overwrite 可选的。指示能否覆盖已有文件的布尔值。True 指示可覆盖文件,False 指示不能覆盖文件。默认是 True 。
- unicode 可选的。指示文件是作为 Unicode 还是 ASCII 文件来创建的布尔值。True 指示文件作为 Unicode 文件创建,而 False 指示文件被作为 ASCII 文件创建。默认是 False。
默认或-2 默认格式,0是ASC2模式, -1 是unicode模式- 应该是 false/0 为ASC2模式,而true/1或其他,都是unicode模式
更多推荐
所有评论(0)