Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
968to972
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
968to972
968to972
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Selektiver Download von ftp-Server

Selektiver Download von ftp-Server
16.04.2008 12:45:15
ftp-Server
Hallo zusammen,
ich stehe vor folgendem Problem, bzw Ausgangssituation:
Ich habe einen ftp-Server, auf dem täglich neue Daten (txt-Dateien) auflaufen, die ich momentan jeden Tag mit einer simplen bat-Routine komplett runterlade, um sie dann in Excel weiter zu verarbeiten.
Leider sind das mittlerweile so viele Dateien, dass der komplette Download recht lang dauert; deshalb würde ich gerne immer nur die Dateien runterladen, die seit dem letzten download dazugekommen sind.
Die Trivial-Lösung (Server nach jedem download einfach leerräumen) scheidet leider aus, weil außer mir noch andere auf die Daten zugreifen müssen.
Nachdem ich die Daten ohnehin in Excel weiterverarbeite, und dort auch eine Liste der bereits verarbeiteten Dateien habe, dachte ich es ist vielleicht am einfachsten, den download direkt per VBA aus Excel heraus zu realisieren.
Sprich per VBA müsste zum einen der Abgleich der Daten auf dem Server mit denen in meiner Excel-Liste, und zum anderen der Download aller Dateien, die nicht in der Liste sind, realisiert werden.
Hat da jemand eine Idee?
Vielen Dank schonmal & schönen Gruß,
Andi

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Selektiver Download von ftp-Server
16.04.2008 12:58:34
ftp-Server
Hallo Andi,
du könntest mit dem ftp-Befehl
dir *.* c:\liste.txt
den Verzeichnisinhalt auf deine lokale Platte kopieren und diese Datei dann auswerten.
Gruß Matthias

AW: Selektiver Download von ftp-Server
16.04.2008 17:39:41
ftp-Server
Hi Matthias,
das klingt schonmal gut.
Wie kann ich aber aus VBA heraus die Dateien dann runterladen?
Bisher werwende ich folgendes Verfahren:
Ich habe ein .bat-Datei mit einer einzigen Zeile:
ftp -s:datendownload.ftp
Daraus wird dann die Datei datendownload.ftp aufgerufen mit folgendem Code:
open [myftp].[mydomain].de
[myLogIn]
[myPassword]
lcd C:\download-zeil-verzeichnis
mget *.*
Yes
Yes
Yes
[...]
Bye

Damit lade ich alles, was auf dem Server liegt, ins Zielverzeichnis.
Wie kann ich jetzt
a) das ganze in VBA umsetzen
b) nur ausgewählte Dateien runterladen?
Vielen Dank für Deine Hilfe,
Andi

Anzeige
noch offen (ot)
16.04.2008 18:11:03
Andi
.

AW: Selektiver Download von ftp-Server
16.04.2008 22:24:50
ftp-Server
Hallo Andi,
ich habe erst vor einiger Zeit was zusammengebastelt für meine Zwecke.
statt mget *.* lädtst du mit VBA nur die, Dateien, die du brauchst.
Dazu kannst du die UDF Download(url As String, pfad As String, Optional ErrMsg = 1) nutzen:

Option Explicit
Public 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
Private Declare Function DeleteUrlCacheEntry _
Lib "wininet.dll" Alias "DeleteUrlCacheEntryA" _
(ByVal lpszUrlName As String) As Long
Public Enum URLDownloadErrConstants
udErrAborted = &H80004004
udErrDestFileExists = &H800C0001
udErrInvalidUrl = &H800C0002
udErrNoSession = &H800C0003
udErrCannotConnect = &H800C0004
udErrResourceNotFound = &H800C0005
udErrObjectNotFound = &H800C0006
udErrDataNotAvailable = &H800C0007
udErrDownloadFailure = &H800C0008
udErrAuthenticationRequired = &H800C0009
udErrNoValidMedia = &H800C000A
udErrConnectionTimeout = &H800C000B
udErrInvalidRequest = &H800C000C
udErrUnknownProtocol = &H800C000D
udErrSecurityProblem = &H800C000E
udErrCannotLoadData = &H800C000F
udErrCannotInstantiateObject = &H800C0010
udErrRedirectFailed = &H800C0014
udErrRedirectToDir = &H800C0015
udErrCannotLockRequest = &H800C0016
End Enum
Public Function Dateiname(ByVal url As String) As String
Dim i As Integer
i = InStrRev(url, "/")
If i > 0 Then
Dateiname = Mid(url, i + 1)
Else
Dateiname = url
End If
End Function
' Funktion Download(url As String, pfad as string, Optional ErrMsg = 1)
' url: URL zur Datei, z.B. "http://domain.de/verz/ _
datei.txt"
'         (Achtung: relevante Groß-/Kleinschreibung!)
'  pfad:  lokales Zielverzeichnis oder Zieldatei, z.B.
'         "C:\test\":        Download in den Ordner, Name wie auf dem Server
'         "C:\test\123.txt": Dateiname wird neu angegeben
'  ErrMsg: =0, dann werden Fehlermeldungen unterdrückt
'  Rückgabewert: True:Erfolg, False:Fehler beim Download
'  ACHTUNG: lokale Dateien werden ohne Rückfrage überschrieben!
Function Download(url As String, pfad As String, Optional ErrMsg = 1)
Dim rc As Long, rcmsg As String
Dim dest As String
If Right(pfad, 1) = ":" Then pfad = pfad & "\" 'aus "C:" mach "C:\"
If Right(pfad, 1) = "\" Then
'Pfad angegeben
dest = pfad & Dateiname(url)
Else
'Datei angegeben
dest = pfad
End If
rc = DeleteUrlCacheEntry(url)
rc = URLDownloadToFile(0, url, dest, 0, 0)
If rc Then
Select Case rc
Case URLDownloadErrConstants.udErrAborted: rcmsg = "Aborted"
Case URLDownloadErrConstants.udErrAuthenticationRequired: rcmsg = "Authentication  _
Required"
Case URLDownloadErrConstants.udErrCannotConnect: rcmsg = "Cannot Connect"
Case URLDownloadErrConstants.udErrCannotInstantiateObject: rcmsg = "Cannot Instantiate  _
Object"
Case URLDownloadErrConstants.udErrCannotLoadData: rcmsg = "Cannot Load Data"
Case URLDownloadErrConstants.udErrCannotLockRequest: rcmsg = "Cannot Lock Request"
Case URLDownloadErrConstants.udErrConnectionTimeout: rcmsg = "Connection Timeout"
Case URLDownloadErrConstants.udErrDataNotAvailable: rcmsg = "Data Not Available"
Case URLDownloadErrConstants.udErrDestFileExists: rcmsg = "DestFile Exists"
Case URLDownloadErrConstants.udErrDownloadFailure: rcmsg = "Download Failure"
Case URLDownloadErrConstants.udErrInvalidRequest: rcmsg = "Invalid Request"
Case URLDownloadErrConstants.udErrInvalidUrl: rcmsg = "Invalid URL"
Case URLDownloadErrConstants.udErrNoSession: rcmsg = "No Session"
Case URLDownloadErrConstants.udErrNoValidMedia: rcmsg = "No Valid Media"
Case URLDownloadErrConstants.udErrObjectNotFound: rcmsg = "Object Not Found"
Case URLDownloadErrConstants.udErrRedirectFailed: rcmsg = "Redirect Failed"
Case URLDownloadErrConstants.udErrRedirectToDir: rcmsg = "Redirect To Dir"
Case URLDownloadErrConstants.udErrResourceNotFound: rcmsg = "Resource Not Found"
Case URLDownloadErrConstants.udErrSecurityProblem: rcmsg = "Security Problem"
Case URLDownloadErrConstants.udErrUnknownProtocol: rcmsg = "Unknown Protocol"
Case Else: rcmsg = "Unknown Error"
End Select
If ErrMsg Then MsgBox "Fehler beim Herunterladen: 0x" & Hex(rc) & " " & rcmsg, vbCritical
Download = False
Else
Download = True
End If
End Function


Viel Erfolg,
Matthias

Anzeige
AW: Selektiver Download von ftp-Server
17.04.2008 09:11:00
ftp-Server
Guten Morgen Matthias,
vielen Dank, das sieht auf den ersten Blick sehr vielversprechend aus :-)
Ich werde mich im Laufe des Tages näher damit beschäftigen, und melde mich dann wieder, ob's geklappt hat.
Schönen Gruß,
Andi

AW: Selektiver Download von ftp-Server
17.04.2008 09:46:00
ftp-Server
Hi nochmal,
eine Frage hätte ich noch:
Kann man in Deine Funktion irgendwie einen LogIn-Namen und ein Passwort als weitere Übergabe-Parameter einbauen?
Schönen Gruß,
Andi

AW: Selektiver Download von ftp-Server
17.04.2008 09:57:14
ftp-Server
Hallo Andi,
du meinst, wenn das Verzeichnis mit .htaccess geschützt ist?
Versuch mal, als URL anzugeben:
http://username:Password@domain.de/verzeichnis/datei.txt
Gruß Matthias

Anzeige
AW: Selektiver Download von ftp-Server
17.04.2008 10:10:00
ftp-Server
Hi,
danke für die schnelle Antwort; leider kommt jetzt die Meldung
Fehler beim Herunterladen: 0x80004004 Aborted
Mit meinem alten Skript funktioniert der download aber, kann also nicht daran liegen, der der Server gerade nicht geht.
Ich rufe die Funktion so auf:
Dim dl As Boolean
dl = Download("ftp://[user]:[password]@abcd.efgh.org/Testdatei.txt", "C:\test")
Schönen Gruß,
Andi

AW: Selektiver Download von ftp-Server
17.04.2008 10:22:16
ftp-Server
Hallo Andi,
wenn die Datei in den Ordner "C:\test" soll, musst du als Pfad "C:\test\" (mit abschließendem "\") angeben.
funktioniert der Aufruf denn, wenn du die Zeile in die Adresszeile eines Browsers schreibst?
Bei mir ist es so: ich übertrage die Dateien zwar mit ftp, aber beim Herunterladen muss ich "http:" abgeben.
Gruß Matthias

Anzeige
AW: Selektiver Download von ftp-Server
17.04.2008 10:36:00
ftp-Server
Hallo Matthias,
wenn die Datei in den Ordner "C:\test" soll, musst du als Pfad "C:\test\" (mit abschließendem "\") angeben.
Das war's!
Jetzt funktioniert's wundernbar.
Vielen Dank für Deine Hilfe.
Schönen Gruß,
Andi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige