文件操作——写入

2020-07-28 11:31:59 浏览数 (1)

前面我们说到了文件的读取,读取的文件是我们手动创建的txt文本文档,VBA也是可以对文件进行写操作的。

1、文件的写入:

在VBA里,我们要对文件进行二进制的写操作,使用的是:

代码语言:javascript复制
Open pathname For mode [ Access access ] [ lock ] As [ # ] filenumber [ Len = reclength ]
Put[ # ] filenumber、[ recnumber ]、 varname
Close [ filenumberlist ]

打开Open-写入Put-关闭Close,仍然是标准的3个步骤。

2、文件写入代码

我们来尝试用VBA代码对文件进行写操作:

代码语言:javascript复制
Sub WriteTxtByOpenBin()
    Dim num_file As Integer
    Dim str As String
    
    str = "测试文件写入"
    
    Dim b() As Byte
    '将string转换为byte数组
    b = str
    
    '获取1个文件号
    num_file = VBA.FreeFile
    
    Open ThisWorkbook.Path & "put.txt" For Binary Access Write As #num_file
    
    '写入数据
    Put #num_file, 1, b
    '关闭文件
    Close #num_file
End Sub

没出什么问题的话,在程序文件的目录下,会生成1个put.txt文件,我们双击打开的话,你应该会发现乱码了:

为什么和我们写入的str = "测试文件写入"不一样呢?

其实这还是编码原因造成的,记得我们文件读取里提到的那个StrConv吧,我们进行转换一下:

代码语言:javascript复制
Sub WriteTxtByOpenBin()
    Dim num_file As Integer
    Dim str As String
    
    str = "测试文件写入"
    
    Dim b() As Byte
    '将string转换为byte数组
    b = VBA.StrConv(str, vbFromUnicode)
    
    '获取1个文件号
    num_file = VBA.FreeFile
    
    Open ThisWorkbook.Path & "put.txt" For Binary Access Write As #num_file
    '写入数据
    Put #num_file, , b
    '关闭文件
    Close #num_file
End Sub

这时候打开就正常了。

上面我们说的是mode为Binary的方法,VBA里还提供了Output ,这时候可以直接使用Write来写入String等各种数据类型的数据,VBA还会帮忙处理好各种数据类型的写入方式,比如String类型会加上双引号,日期会加上#等等。甚至会帮忙将Unicode编码转换为ANSI编码,这些都会帮我们处理好。

这也是前面在数组Array提到过的:过度的封装(而且我们看不到源码),让我们这些使用者对底层的一些知识一无所知。

虽然这个很好用,但希望使用者一定要先去理解如何按照mode为Binary的方法去读取、写入文件,在要处理的地方都自己手动去处理好,真正能够理解了原理后,图方便再去使用mode为Input、Output等。

0 人点赞