Как я могу загрузить данные с помощью ftp в электронную таблицу с VBA для Microsoft Excel - PullRequest
0 голосов
/ 08 февраля 2019

Я нашел код ниже, чтобы начать с разработки автоматизированного способа загрузки файлов с FTP-сайта.однако он терпит неудачу каждый раз без любой ошибки, которую я могу устранить.

У меня есть новичок в Excel vba, поэтому некоторая помощь была бы признательна.

Я пытался искать в Интернете и здесь из-за переполнения стека, но я не мог понять это самостоятельно

Private Const FTP_TRANSFER_TYPE_UNKNOWN As Long = 0
Private Const INTERNET_FLAG_RELOAD As Long = &H80000000

Private Declare Function InternetOpenA Lib "wininet.dll" ( _
                                ByVal sAgent As String, _
                                ByVal lAccessType As Long, _
                                ByVal sProxyName As String, _
                                ByVal sProxyBypass As String, _
                                ByVal lFlags As Long) As Long

Private Declare Function InternetConnectA Lib "wininet.dll" ( _
            ByVal hInternetSession As Long, _
            ByVal sServerName As String, _
            ByVal nServerPort As Long, _
            ByVal sUsername As String, _
            ByVal sPassword As String, _
            ByVal lService As Long, _
            ByVal lFlags As Long, _
            ByVal lcontext As Long) As Long

Private Declare Function FtpGetFileA Lib "wininet.dll" ( _
                            ByVal hConnect As Long, _
                            ByVal lpszRemoteFile As String, _
                            ByVal lpszNewFile As String, _
                            ByVal fFailIfExists As Long, _
                            ByVal dwFlagsAndAttributes As Long, _
                            ByVal dwFlags As Long, _
                            ByVal dwContext As Long) As Long

Private Declare Function InternetCloseHandle Lib "wininet" ( _
                            ByVal hInet As Long) As Long


Sub FtpDownload(ByVal strRemoteFile As String, ByVal strLocalFile As String, ByVal strHost As String, ByVal lngPort As Long, Optional ByVal strUser As String, Optional ByVal strPass As String)
    Dim hOpen As Long
    Dim hConn As Long

hOpen = InternetOpenA("FTPGET", 1, vbNullString, vbNullString, 1)
hConn = InternetConnectA(hOpen, strHost, lngPort, strUser, strPass, 1, 0, 2)

If FtpGetFileA(hConn, strRemoteFile, strLocalFile, 1, 0, FTP_TRANSFER_TYPE_UNKNOWN Or INTERNET_FLAG_RELOAD, 0) Then
    Debug.Print "Success"
Else
    Debug.Print "Fail"
End If

'Close connections
InternetCloseHandle hConn
InternetCloseHandle hOpen

End Sub

Sub Get_File_From_FTP()

'Assign Host URL, Source and Destination File path
Dim HostURL, fileSource, FileDestination As String
HostURL = ThisWorkbook.Sheets(1).Cells(1, 1)
fileSource = ThisWorkbook.Sheets(1).Cells(1, 2)
FileDestination = ThisWorkbook.Sheets(1).Cells(2, 2)
FtpDownload fileSource, FileDestination, HostURL, 21, "Username", "Password"

End Sub

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019
Dim HostURL, fileSource, FileDestination As String
    HostURL = "ftp.datacentre.com"
    fileSource = "/country_forecast/CWG_ecop_19021012_United-Kingdom.csv"
    FileDestination = "C:\Development\Test1\newFile.txt"

FtpDownload fileSource, FileDestination, HostURL, 21, "username", "password"

Я уже все перепробовал.поэтому я использую вышеуказанные пути.Этот URL работает, хотя я загружаю файл вручную.[ FTP: // имя пользователя: password@ftp.datacentre.com/country_forecast/CWG_ecop_19021012_United-Kingdom.csv]

0 голосов
/ 08 февраля 2019

Хорошо, приведенный выше код работает без проблем.Я полагаю, что проблема может быть в ваших ссылочных ячейках ...

HostURL = ThisWorkbook.Sheets(1).Cells(1, 1)
fileSource = ThisWorkbook.Sheets(1).Cells(1, 2)
FileDestination = ThisWorkbook.Sheets(1).Cells(2, 2)

Когда я облажался с этим, я обнаружил, что мне нужно иметь этот формат ...

HostURL = "192.168.168.2" 'Or your FQDN
fileSource = "/This/Is/The/Path/To/Your/File.file" ' Make sure that this matches your file path
FileDestination = "C:\This\Is\The\Complete\Path\On\Your\Machine.File"

Конечно, убедитесь, что вы заполнили раздел имени пользователя и пароля макроса ...

FtpDownload fileSource, FileDestination, HostURL, 21, "YOUR_USERNAME_HERE", "YOUR_PASSWORD_HERE"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...