Как скачать все ссылки в столбце А в папке? [Дубликат]

2

Возможный дубликат:
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
  • 0
    У людей, которые отмечают дубликаты, этот другой пост является альтернативным решением, а не решением кода, который я разместил.
Теги:
excel-vba
excel
excel-2010

2 ответа

1
Лучший ответ

Я уверен, что вы сможете немного изменить следующий код, чтобы удовлетворить ваши потребности:

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

Удачи!

  • 0
    Привет Питер, :) это для моих личных вещей. Итак, где у вас есть myurl, я могу положить TXT-файл со ссылками в нем?
  • 0
    @ Маугли Конечно! Попробуйте любой действительный URL, например, логотип SO: cdn.sstatic.net/stackoverflow/img/apple-touch-icon.png .SaveToFile - здесь укажите локальное имя файла.
Показать ещё 4 комментария
0

Это должно сработать для вас. Он будет загружаться и переименовываться с именем файла, находящимся в столбце 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

Позвольте мне знать, если это помогает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню