Загрузите ZIP-файл CSV после распаковки - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть URL-адрес, который содержит ZIP-файл в формате CSV, мне нужно загрузить только .csv из ZIP, коды ниже загружает ZIP

Sub DownloadFile()

    Dim myURL As String
    myURL = "https://www1.nseindia.com/content/historical/EQUITIES/2020/FEB/cm07FEB2020bhav.csv.zip"

    Dim WinHttpReq As Object
    Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
    WinHttpReq.Open "GET", myURL, False, "username", "password"
    WinHttpReq.send

    If WinHttpReq.Status = 200 Then
        Set oStream = CreateObject("ADODB.Stream")
        oStream.Open
        oStream.Type = 1
        oStream.Write WinHttpReq.responseBody
        oStream.SaveToFile "C:\Users\playt\Desktop\STACK\ruff.zip", 2 ' 1 = no overwrite, 2 = overwrite
        oStream.Close
    End If

End Sub

1 Ответ

0 голосов
/ 21 февраля 2020

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

Вставьте эти строки в конце существующего кода (непосредственно перед End Sub):

Dim zipFileName As String, unZipFolderName As String
  zipFileName = "C:\Users\playt\Desktop\STACK\ruff.zip"

  unZipFolderName = left(zipFileName, InStrRev(zipFileName, "\") - 1)
  UN_Zip zipFileName, unZipFolderName

Простейшая подпрограмма, способная распаковать и удалить архив, должна выглядеть так (для этого нужна ссылка на 'Microsoft Shell Controls And Automation'):

Private Sub UN_Zip(zipFileName As String, unZipFolderName As String)
     Dim wShApp As New Shell

     wShApp.Namespace(unZipFolderName).CopyHere wShApp.Namespace(zipFileName).Items
      Kill zipFileName
 End Sub

Если лень добавить ссылку, код выглядит более элегантно, подпрограмма может быть адаптирована только с двумя строками:

Используйте Dim wShApp As Object вместо объявления Dim wShApp As New Shell и затем добавьте следующую строку:

Set ShApp = CreateObject("Shell.Application")

В этом Кстати, ссылка не нужна, больше ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...