Opgelost Bestanden op internet lezen

Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.

AnnevdD

Verenigingslid
Lid geworden
8 mei 2007
Berichten
247
Ik heb een paar websites op internet. Daar doe ik regelmatig onderhoud aan.
Ik zou graag met Excel/VBA de namen van de bestanden van die sites op willen halen en evt. deze bestanden renamen. Kan dat? Zo ja, hoe?
 
Een soortgelijke vraag las ik gisteren op PHPhulp, maar dan zonder het Excel/VBA verhaal.
Ik weet niet hoe je jouw site beheert, maar als dit gebruikelijkerwijs via FTP gaat, dan kan je met VBA de WinSCP .NET Assembly DLL gebruiken.

ChatGPT kwam met dit opzetje (voordeurgarantie)

Code:
Sub HernoemBestandViaFTP()
    Dim server As String
    Dim gebruikersnaam As String
    Dim wachtwoord As String
    Dim oudPad As String
    Dim nieuwPad As String
    Dim ftpCommand As String

    ' FTP-inloggegevens
    server = "ftp.example.com"
    gebruikersnaam = "jouw_gebruikersnaam"
    wachtwoord = "jouw_wachtwoord"

    ' Specificeer het huidige en nieuwe pad voor het bestand op de FTP-server
    oudPad = "/oude-map/oud-bestand.txt"
    nieuwPad = "/nieuwe-map/nieuw-bestand.txt"

    ' Bouw de FTP-opdracht voor hernoemen
    ftpCommand = "RNFR " & oudPad & vbCrLf & "RNTO " & nieuwPad & vbCrLf

    ' Voer de FTP-opdracht uit
    Call FtpExecute(server, gebruikersnaam, wachtwoord, ftpCommand)

    ' Optioneel: geef een melding weer
    MsgBox "Bestand is hernoemd van " & oudPad & " naar " & nieuwPad
End Sub

Sub FtpExecute(server As String, gebruikersnaam As String, wachtwoord As String, ftpCommand As String)
    Dim objShell As Object
    Set objShell = VBA.CreateObject("WScript.Shell")

    ' Maak een bestand met de FTP-opdracht
    Dim ftpScript As String
    ftpScript = Environ$("TEMP") & "\ftpscript.txt"
    Open ftpScript For Output As #1
    Print #1, ftpCommand
    Close #1

    ' Bouw de FTP-opdracht voor uitvoering
    Dim cmd As String
    cmd = "ftp -n -s:" & ftpScript & " " & server

    ' Voer de FTP-opdracht uit met behulp van de Shell
    objShell.Run cmd, 0, True

    ' Verwijder het tijdelijke FTP-scriptbestand
    Kill ftpScript
End Sub

Maar dit voelt gigantische als een weg naar Rome aan die helemaal via Istanboel loopt. Ik zou zeker aanraden om te kijken of je de boel minder complex kan maken, en je workflow hierop aan te passen.

Want wat wil je precies bereiken? En waarom moet dit via Excel?
En waarom moet het bestand hernoemd worden? Want koppelingen kunnen dan ook verloren gaan.
Dan kunnen wij meedenken naar iets simpelers.
 
Laatst bewerkt:
Je kunt Excel gewoon als FTP-programma gebruiken via de hulpschermen van Bestand Open en Bestand opslaan als.
Klap het veld achter 'look in' open
klik op add.modify ftp locations
Geef de FTP lokatie, je gebruikersnaam en wachtwoord op; sluit af.
Als je nu op de nieuwe FTP lokatie klikt krijg je het inlogscherm te zien; voer je wachtwoord in en vervolgens krijg je de directorystruktuur van de webiste te zien, waar je als in Explorer kunt werken.
Niks nie code nodig nie.
 

Bijlagen

  • __FTP_001.PNG
    __FTP_001.PNG
    57 KB · Weergaven: 7
@snb Volgens mij refereer je naar een screenshot van een hele oude Windows / Office versie.
 
Dat heeft niets met de vraag noch met de functionaliteit van Excel te maken.
 
Dat heeft niets met de vraag noch met de functionaliteit van Excel te maken.
Ik zie in Excel 365 geen FTP-opties meer.
 
Ik begrijp veel van wat jullie zeggen niet. Dus vraag ik graag nog even door.
De oplossing van snb lijkt sympathiek, maar ik begrijp niet goed wat je precies bedoelt. Het eerste is al: wat bedoel je precies met de hulpschermen van Bestand Open en Bestand Opslaan als.
Ik gebruik Excel in Office/Windows 365.
Als ik in het hoofdmenu van Excel linksklik op Bestand dan krijg ik een aantal opties als: Start, Nieuw, Open, Invoegtoepassingen downloaden, etc.
Als ik rechtsklik op Bestand dan kan ik kiezen tussen "Werkbalk Snelle toegang verbergen", "Het lint aanpassen" en "Het lint samenvouwen".
Als ik na de linksklik klik op "Opslaan" of "Opslaan als" dan krijg ik als mogelijkheden: Recent, OneDrive Persoonlijk (2 versies), Deze PC, Locatie toevoegen of Bladeren.
Of wel ik vind geen hulpscherm waarin ik een veld achter "look in" kan open klappen.
Hiermee kom ik dus nog niet verder.
Maar ik zou graag van SNB meer toelichting willen krijgen als het bij mij ook moet kunnen.

De voorzet van Aar zou ik ook best willen proberen. Ik maak veel gebruik van FTP, maar hoe kan ik met VBA de WinSCP .NET Assembly DLL gebruiken.
Overigens gaf ChatGPT mij ook een code voorbeeld. (zie bijlage) maar dat levert geen goede lijst van bestandsnamen op en het wijzigen gebeurt daar helemaal niet.

Code:
Sub BestandsnamenOphalenEnWijzigen()
    ' Vereist verwijzing naar Microsoft XML, v6.0 via Tools -> References
   
    Dim url As String
    Dim xmlHTTP As Object
    Dim htmlDoc As Object
    Dim bestandsnamen As Object
    Dim bestandsnaam As Variant
   
    ' URL van de website waar de bestanden worden gehost
    url = "https://voorbeeld.com/bestanden/"
   
    ' Maak een XMLHTTP-object aan
    Set xmlHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")
   
    ' Stuur een HTTP-request naar de website
    xmlHTTP.Open "GET", url, False
    xmlHTTP.send
   
    ' Maak een HTML-document object aan en laad de HTML-response
    Set htmlDoc = CreateObject("HTMLfile")
    htmlDoc.body.innerHTML = xmlHTTP.responseText
   
    ' Zoek de elementen met de bestandsnamen (afhankelijk van de HTML-structuur van de website)
    Set bestandsnamen = htmlDoc.getElementsByTagName("a")
   
    ' Loop door de gevonden bestandsnamen
    For Each bestandsnaam In bestandsnamen
        ' Voer de gewenste wijzigingen uit op de bestandsnaam (bijv. vervang spaties door underscores)
        Dim gewijzigdeNaam As String
        gewijzigdeNaam = Replace(bestandsnaam.innerText, " ", "_")
       
        ' Toon de originele en gewijzigde bestandsnaam in de direct-venster (kan worden aangepast aan je behoeften)
        Debug.Print "Origineel: " & bestandsnaam.innerText & ", Gewijzigd: " & gewijzigdeNaam
    Next bestandsnaam
End Sub

Als jullie me verder kunnen helpen, dan heel graag.

Overigens: Wat ik wil bereiken is een html website via een excel basisbestand in meerdere talen genereren. Ik heb alle teksten en bestandsnamen in het NL en in diverse talen. Nu wil ik o.a. de bestanden kopieren en de bestandsnamen met een Excel macro in de juiste taal renamen. Binnen de windows omgeving werkt dat goed, maar ik wil het (voor nazorg) ook op de server kunnen.
 
En waarom moet dit via Excel?
Ik heb het idee dat jij je het nu lastig maakt, terwijl er veel simpelere mogelijkheden zijn.

Zelf zou ik denken aan een website (dat is ook je einddoel) waar je een excel-sheet kan uploaden, waarna vervolgens alles wordt verwerkt.

Zelf het populaire Wordpress zou dit ongetwijfeld kunnen met een add-on.

En zonder programmeren heb je dit al in een half uur werkend.
 
Laatst bewerkt:
Ik denk dat ik niet goed genoeg heb uitgelegd waarom ik behoefte heb aan een mogelijkheid om bestanden van internet te lezen en bestandsnamen te wijzigen.
Maar het lijkt me ook niet zo zinvol dat hier uitgebreid te bespreken. Dat levert weer andere discussies op.
Graag zou ik advies krijgen over hoe ik die bestanden kan lezen en de namen kan wijzigen.
Omdat ik met de eerste adviezen niet verder kom zou ik daar graag meer toelichting op krijgen.
 
Wat is de reden voor jouw ingewikkelde workflow? Je hebt al een plek op internet waar je excelbestanden op staan? Waarom zou je dit niet via een website willen verwerken? En waarom moet het expliciet via Excel?
 
Mss kun je Excel met een (s)ftp script combineren? Dat laatste bestaat immer al.....

Een paar voorbeelden via remote renamen via een script die gevonden werden:

Start by collecting the command output to a variable.
Then, use the variable to generate the ftp.exe script on the fly.
FOR /F "tokens=* USEBACKQ" %%F IN (`date /t`) DO (
SET OUTPUT=%%F
)

echo open ftp.example.com>ftp.txt
echo user>>ftp.txt
echo password>>ftp.txt
echo rename current_name %OUTPUT%>>ftp.txt
echo bye>>ftp.txt

ftp -s:ftp.txt

Methode 1 lijkt me dan wel interessant om als basis mee te starten en daar een keuze van gewenste naamsverandering te realiseren.
Geen ervaring zelf er me, maar dit vond ik via: https://www.google.com/search?client=opera&q=renname+files+remote+ftp+files+name+script
Remarks:

  • For renaming multiple files two methods exist:
    # Method 1

    # Get the remote file listing, store it in $list
    $result=GETLIST($list,REMOTE_FILES,"*.txt")

    # For each file in $list...
    FOREACH $item IN $list
    # Rename a file adding a prefix to the
    # current file name
    RENAMEFILE($item,"myprefix-".$item)
    END FOREACH

    # Method 2
    # Only works with file extensions

    # Rename all jpg files to jpeg
    RENAMEFILE("*.jpg","*.jpeg")

    # Rename *2005.doc to *.doc.sav
    RENAMEFILE("*.2005.doc","*.doc.sav")

Mbv Wincsp

Via WS_FTP (using ftpscrpt)
 
Als dit voor @AnnevdD complex wordt, zou ik zeggen: KISS, en pas de workflow aan.

In mijn ogen is FTP eigenlijk ook niet meer van deze tijd.
 
@Aar SFTP kan ook, maar er mag ook webdav via ssh genomen worden (Winscp ondersteunt dat ook)
Het gaat vooral mij om opties aan te dragen voor de kern van de vraag van de TS.
 
Ja, en daarbij is het ook toegestaan om door te vragen waarom het zo moeilijk moet, terwijl er makkelijkere mogelijkheden zijn. We willen iedereen immers naar een oplossing helpen. En soms is er zelfs een korte weg, zoals in dit geval.

Als dit niet een oplossing is ben ik benieuwd naar valide gegronde argumenten van @AnnevdD . Een voordeel is dat de leercurve minder stijl is, efficiënter, sneller toe te passen is en op elk systeem werkt.
 
steil zul je bedoelen; dat is heel iets anders dan de stijl van een deur of in de kunst.
 
  • Leuk
Waarderingen: Aar
@Aar Mss zou een topic start template handig zijn om een vragensteller een veel betere startvraag te laten maken. Het is niet de eerste keer dat zo'n aanpak ter sprake kwam. Als een groot deel van de mensen die anders zelf geen goede startvraag weten te maken daar mee geholpen zouden zijn, zou dat voor de helpers (ook) een enorme winst zijn. Nog steeds zal er dan altijd een groepje vragenstellers overblijven waar zelf dat nog te lastig is, daar moet dan op doorgevraagd worden, wat mij ook niet altijd uitkomt.
 
  • Leuk
Waarderingen: Aar
Je kunt in de verkenner ook gewoon een netwerklokatie toevoegen met als adres "ftp://gebruikersnaam@www.snb-vba.eu"
Dan kun je de verkenner als ftp-programma gebruiken. Vervang de rode tekst door jouw gebruikersnaam om bij de website in te loggen; vervang de blauwe tekst door de domeinnaam van die website.
 
Ook dat kan, maar de vraag is hoelang dat nog ondersteund blijft worden.
En lamgzamerhand zijn er steeds meer hostings die van FTP afstappen, en SFTP vereisen. I.t.t. tot wat men denkt is dit een ander protocol.
 
Zolang het werkt, werkt het en is het een antwoord op de vraag.
 
Zolang het werkt, werkt het en is het een antwoord op de vraag.
Dan refereer ik terug op wat ik eerder gezegd heb.
Ik ben benieuwd naar de reacties van @AnnevdD waarom het volgens haar op een complexe manier moet, terwijl het ook veel makkelijker kan. Uiteindelijk wil je dingen automatiseren, dus handwerk is tijdrovender, en kan leiden tot meer fouten.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan