这里使用了vba如下两个对象:
Microsoft.XMLHTTP
:文件读写,可读写二进制,可指定编码,对于utf-8编码文本文件使用FSO的TextStream对象打开,读取到的内容可能会出现乱码,可以使用该对象打开;前期绑定添加引用:Microsoft ActiveX Data Objects 2.8
Microsoft.XMLHTTP
:发送请求并获得返回,前期绑定添加:Microsoft XML v6.0
下载案例如下:下载火影忍者的图片到当前工作簿目录下
图片链接为:https://i0.hdslb.com/bfs/article/cb84523da172b11eb6222eb12f3c1737953f0359.jpg
Sub photo_download()
' 下载图片
Dim X As Object
Dim ASTeam As Object
Dim content() As Byte
Set X = CreateObject("Microsoft.XMLHTTP")
Set ASTeam = CreateObject("ADODB.Stream")
With X
.Open "get", "https://i0.hdslb.com/bfs/article/cb84523da172b11eb6222eb12f3c1737953f0359.jpg", False
.send
Do Until .readystate = 4
DoEvents
Loop
content = .responsebody ' 请求返回对象
End With
With ASTeam
.Type = 1 ' 二进制类型
.Mode = 3 ' 可读可写
.Open '打开文件
.write content ' 文件写入
.savetofile ThisWorkbook.Path & "/火影忍者.jpg" ' 文件另存
.Close ' 关闭
End With
MsgBox "download done"
End Sub
关于ADODB.Stream
的几个属性说明:
utf-8
如果使用后期绑定的方式,该属性只能通过枚举常量的等价数字定义,比如type的2表示读写文本文件
ADODB.Stream
文本几个方法:
LoadFromFile
:加载文本文件
ReadText
:读取,ReadText(10)表示读取10个字符,不带数字表示读取文本剩余所有内容:ReadAll
close
:同二进制文件,表示关闭对象,读写后关闭
WriteText
:写入记录行,chr(10)
表示换行
SaveToFile
:保存为文本文件
文件读写样例
Sub file_read_write()
' 文本读写案例
' Dim ASteam As ADODB.Stream ' 前期引用绑定,直接声明对象即可
Dim ASteam As Object
dim txt_path,s1,s2 as String
Set ASteam = CreateObject("ADODB.Stream") ' 创建对象
txt_path = ThisWorkbook.Path & "/文本文件.txt" ' 文本文件路径
With ASteam
' 文件写入
.Type = 2 ' adTypeText ' 指定类型
.Mode = 3 ' adModeReadWrite ' 可读写
.Charset = "utf-8" ' 指定编码格式
.Open ' 打开
.WriteText "写入一行数据"
.WriteText Chr(10) ' 写入换行符
.WriteText "写入第二行数据"
.SaveToFile txt_path, adSaveCreateOverWrite ' 文件如果存在则覆盖
' 文件读取
.LoadFromFile (txt_path)
s1 = .ReadText(3)
s2 = .ReadText
Debug.Print s1, s2
.Close
End With
End Sub