前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >文件操作——读取

文件操作——读取

作者头像
xyj
发布2020-07-28 10:55:04
1.7K0
发布2020-07-28 10:55:04
举报
文章被收录于专栏:VBA 学习

我们使用Excel VBA绝大多数情况都是在处理Excel的数据,一般都是直接读取Excel,也就是使用Workbooks.Open,随着VBA使用的深入,我们要处理的数据可能不局限在Excel里,有时候也会需要去读取外部的数据。

在电脑里,所有的文件都是硬盘上的一些数据,也就是010101那种东西。Excel自然也是,我们在Excel VBA对象模型里提到过这个,之所以我们使用Workbooks.Open能够打开Excel,是因为VBA里已经做好了这个功能,其实Workbooks.Open也能打开txt文本文档,只要数据是比较规范的,可以看官网文档的介绍。

1、txt文本文档的读取:

在Windows系统里,我们一般都使用过txt后缀的文本文档,这种文件的数据是非常简单的,所有的数据都是按顺序排列的,不存在特殊的结构。

Excel文档的数据就不是这样的,07版本之前,也就是后缀为.xls的,那时候Excel的数据是使用一种叫做复合文档的结构存储的。07版本之后,也就是后缀为.xlsx的,其实它就是一个zip的压缩包,解压出来后主要一些xml的文本文档,和我们了解的txt文本文档是一样的,作为一个单独的文本文档来说,它就是按顺序排列的数据,没有特殊的结构。但是这些xml文本文档之间是有联系的。

在VBA里,我们要按顺序读取一个文本文档的数据的话,使用的是:

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

打开Open-读取Get-关闭Close,标准的3个步骤,记得按F1去看看官方文档。

如果我们使用mode为Binary,这时候就是按照二进制形式顺序去读取文件的数据,其实所有的文件都是可以这样去读取的,因为所有的文件都是硬盘上的一些数据,也就是010101那种东西。

所以读取文件最底层的方法都是这种方式,VBA里还提供了Input等,可以直接读取文本,其实可以理解它就是在Binary Get 基础上,再进行了一些封装处理。

2、文件读取代码

我们来尝试读取一个文件试试,在程序文件的同1个目录下建立1个txt文档,命名为test.txt,随便输入一些东西:

代码语言:javascript
复制
'以字节方式读取文本
Sub ReadTxtByOpenBin()
    Dim num_file As Integer
    Dim str As String
    Dim b() As Byte
    
    '获取1个文件号
    num_file = VBA.FreeFile()
    '打开文件
    Open ThisWorkbook.Path & "\test.txt" For Binary Access Read As #num_file
    'VBA.LOF(num_file)返回num_file这个文件的字节数
    ReDim b(VBA.LOF(num_file) - 1) As Byte
    '读取数据,读取的字节数就是数组b的大小
    Get #num_file, 1, b
    '关闭文件
    Close #num_file
    '将ANSI编码的字节转换为Unicode
    str = VBA.StrConv(b, vbUnicode)
    Debug.Print str
End Sub

没出什么问题的话,程序就能输出你刚才在test.txt中输入的内容。

StrConv是一个编码转换的函数,我们新建1个文本文档,为什么会是ANSI编码呢?这个我们后面再介绍。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 VBA 学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档