当前位置:   article > 正文

VBA每日一练(3),用VBA打开txt文件的三种方法:workbooks.opentext() , open 语句,fso.opentextfile_excel vba打开文件text

excel vba打开文件text

 

经验: 编程确实如李笑来所说,有很多知识前置,所以少年,努力学习吧,除了这个也没啥其他难度。

 

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解释

https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/open-statement?redirectedfrom=MSDN


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中读取全部内容

  1. Sub test_jackma1()
  2. Dim s As String
  3. Open "C:\Users\Administrator\Desktop\test101.txt" For Input As #1
  4. Do While Not EOF(1)
  5. Line Input #1, s
  6. Debug.Print s
  7. Loop
  8. Close #1
  9. End Sub

读取部分内容--读取几行

  •       初始位置,应该是取决于 光标位置,
  •       如果是新打开的文件,一般就是在文件开头第1行,
  •       其他保存过的文件,看关闭时光标最后停留的位置作为下次打开的初始位置?
  1. Sub test_jackma1()
  2. Dim s As String
  3. Open "C:\Users\Administrator\Desktop\test101.txt" For Input As #1
  4. Line Input #1, s
  5. Debug.Print s
  6. Line Input #1, s
  7. Debug.Print s
  8. Line Input #1, s
  9. Debug.Print s
  10. Close #1
  11. End Sub

 

循环逐行读(没有实现自动读最大行数等)

  1. Sub test_jackma1()
  2. Dim s As String
  3. Open "C:\Users\Administrator\Desktop\test101.txt" For Input As #1
  4. For i = 1 To 10 Step 1
  5. Line Input #1, s
  6. Debug.Print s
  7. Next i
  8. Close #1
  9. End Sub

往里写内容(可以用 write 或 print ?)

  1. Sub test_jackma1()
  2. Dim s As String
  3. Open "C:\Users\Administrator\Desktop\test101.txt" For Append As #1
  4. Write #1,
  5. Write #1, 888
  6. Write #1, 999
  7. Close #1
  8. End Sub

 

open "" for append  会在最后一行直接追加(可以用 write 或 print ?)

  1. Sub test300()
  2. Open "C:\Users\Administrator\Desktop\test101.txt" For Append As #1
  3. Print #1, "a,b,c"
  4. Close #1
  5. End Sub

open "" for output  会覆盖文件内容

  1. Sub test300()
  2. Open "C:\Users\Administrator\Desktop\test101.txt" For Output As #1
  3. Print #1, "5"
  4. Close #1
  5. 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                                                                                           
  1. Sub jackma2()
  2. Dim fso1, f1
  3. Set fso1 = CreateObject("Scripting.FileSystemObject")
  4. Set f1 = fso1.OpenTextFile("C:\Users\Administrator\Desktop\test101.txt", 8, TristateFalse)
  5. 'f1.Write ' write 这样会报错
  6. f1.Writeline 'writeline这样是可以的
  7. f1.Writeline "Hello world!"
  8. 'f1.Print "Hello world!" '没有这样的方法 fso.print
  9. f1.Close
  10. End Sub

相关文件操作总结,对于fso对象

  • f.close        (见上面)
  • f.write         (见上面)
  • f.writeline    (见上面)
  • f.read
  • f.readall
  • f.readline
  • f.skipline       光标跳到下一行
  • f.skip   5        光标往后跳几个字节
  1. Sub jackma2()
  2. Dim fso1, f1
  3. Dim x1
  4. Set fso1 = CreateObject("Scripting.FileSystemObject")
  5. Set f1 = fso1.OpenTextFile("C:\Users\Administrator\Desktop\test101.txt", 1, False)
  6. x1 = f1.readline
  7. Debug.Print x1
  8. f1.Close
  9. End Sub
  1. Sub jackma2()
  2. Dim fso1, f1
  3. Dim x1
  4. Set fso1 = CreateObject("Scripting.FileSystemObject")
  5. Set f1 = fso1.OpenTextFile("C:\Users\Administrator\Desktop\test101.txt", 1, False)
  6. x1 = f1.readline
  7. Debug.Print x1
  8. f1.skipline
  9. x1 = f1.readline
  10. Debug.Print x1
  11. f1.Skip 1
  12. x1 = f1.readline
  13. Debug.Print x1
  14. f1.Close
  15. 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可以往文件里写入内容

 

  1. '这一段是微软的手册的官方介绍
  2. Open "TESTFILE" For Output As #1 ' Open file for output.
  3. Print #1, "This is a test" ' Print text to file.
  4. Print #1, ' Print blank line to file.
  5. Print #1, "Zone 1"; Tab ; "Zone 2" ' Print in two print zones.
  6. Print #1, "Hello" ; " " ; "World" ' Separate strings with space.
  7. Print #1, Spc(5) ; "5 leading spaces " ' Print five leading spaces.
  8. 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

 

  1. Sub jackma3()
  2. Workbooks.OpenText Filename:="C:\Users\Administrator\Desktop\test101.txt"
  3. '只能是 workbooks.opentext
  4. '不能是 thisworkbook.opentext 或者 activeworkbook.opentext
  5. End Sub

会生成1个新EXCEL表,也就是所谓的 workbook,同时把这个txt 读入到第一个sheet里,sheet命名,内容都读txt的

 

4.3  FileSystemObject 对象下的各种方法,其中包括 fso.opentextfile

 

_Object_参数始终是**TextStream** 对象的名称。

 

  1. Sub OpenTextFileTest
  2. Const ForReading = 1, ForWriting = 2, ForAppending = 8
  3. Dim fs, f
  4. Set fs = CreateObject("Scripting.FileSystemObject")
  5. Set f = fs.OpenTextFile("c:\testfile.txt", ForAppending, TristateFalse)
  6. f.Write "Hello world!"
  7. f.Close
  8. 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模式

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/625224
推荐阅读
相关标签
  

闽ICP备14008679号