Возможный дубликат:
GET изображения с URL-адреса, а затем переименуйте изображение
У меня есть ссылки на 30+ файлы, которые мне нужно скачать. Есть ли способ сделать это лучше?
Я хочу сделать это в Excel, потому что для того, чтобы получить эти 30+ ссылки, я должен сделать несколько чистых сборок, которые я делаю в excel.
Мне нужно делать это каждый день. если есть способ сделать это в excel, это будет потрясающе.
Например, если A2 - это изображение, загрузите это изображение в папку
https://www.google.com/images/srpr/logo3w.png
если есть способ переименовать logo3w.png в то, что в B2, что было бы еще более удивительным, поэтому мне не придется переименовывать файл.
Скрипт ниже, я нашел онлайн, он работает, но мне нужна помощь в переименовании.
В столбце A2: вниз У меня есть все ссылки
В столбце B2: вниз У меня есть имя файла с расширением
Const TargetFolder = "C:\Temp \"
Private Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long) As Long
Sub Test()
For Each Hyperlink In ActiveSheet.Hyperlinks
For N = Len(Hyperlink.Address) To 1 Step -1
If Mid(Hyperlink.Address, N, 1) <> "/" Then
LocalFileName = Mid(Hyperlink.Address, N, 1) & LocalFileName
Else
Exit For
End If
Next N
Call HTTPDownloadFile(Hyperlink.Address, TargetFolder & LocalFileName)
Next Hyperlink
End Sub
Sub HTTPDownloadFile(ByVal URL As String, ByVal LocalFileName As String)
Dim Res As Long
On Error Resume Next
Kill LocalFileName
On Error GoTo 0
Res = URLDownloadToFile(0&, URL, LocalFileName, 0&, 0&)
End Sub
Я уверен, что вы сможете немного изменить следующий код, чтобы удовлетворить ваши потребности:
Sub DownloadCSV()
Dim myURL As String
myURL = "http://pic.dhe.ibm.com/infocenter/tivihelp/v41r1/topic/com.ibm.ismsaas.doc/reference/LicenseImportSample.csv"
Dim WinHTTPReq As Object
Set WinHTTPReq = CreateObject("Microsoft.XMLHTTP")
Call WinHTTPReq.Open("GET", myURL, False)
WinHTTPReq.send
If WinHTTPReq.Status = 200 Then
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write WinHTTPReq.responseBody
oStream.SaveToFile ("D:\DOCUMENTS\timelog.csv")
oStream.Close
End If
End Sub
Удачи!
.SaveToFile
- здесь укажите локальное имя файла.
Это должно сработать для вас. Он будет загружаться и переименовываться с именем файла, находящимся в столбце B. Я просто заменил второй цикл на строку. Hyperlink.range.row указывает номер строки, в которой присутствует гиперссылка. Таким образом, ячейки (hyperlink.range.row, 2) оценивают ячейки (1,2), ячейки (2,2) и т.д. (Если данные находятся в A1, A2, A3..). Предполагая, что у вас есть имя файла с расширением (ex-xyz.png) в столбце B, это должно сработать.
Const TargetFolder = "C:\Temp\"
Private Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long) As Long
Sub Test()
For Each Hyperlink In ActiveSheet.Hyperlinks
LocalFileName=ActiveSheet.cells(hyperlink.Range.Row,2).value
Call HTTPDownloadFile(Hyperlink.Address, TargetFolder & LocalFileName)
Next Hyperlink
End Sub
Sub HTTPDownloadFile(ByVal URL As String, ByVal LocalFileName As String)
Dim Res As Long
On Error Resume Next
Kill LocalFileName
On Error GoTo 0
Res = URLDownloadToFile(0&, URL, LocalFileName, 0&, 0&)
End Sub
Позвольте мне знать, если это помогает.