Excel - Tabelle 2010 per FTP auf Website uploaden
Hallo,
Konfiguration: WIN Terminalserver 2008 R2 (64 Bit !!!) in Hyper-V-Umgebung, Office 2010
Aufgabe:
Excel-Tabelle beim Schliessen/speichern von Excel autom. per FTP auf unserer Website aktualisieren
Die - nachfolgend beschriebene - in Excel eingebaute Variante funktioniert NICHT:
- Excel Tabelle - Bereich markieren
- Datei speichern unter --> entpr. FTP-Pfad auswählen, Dateityp: Webseite, die Option "Auswahl: Tabelle" auswählen
- Speichern
- Username/PW eingeben
Weiter ... und Excel "hängt" - Sanduhr läuft - nach einiger Zeit --> Excel: "keine Rückmeldung"
Kann nur über Taskmanager abgebrochen werden!
1) Funktioniert die obig beschriebene Variante bei EUCH ?
(falls ja, kann es sein, dass dies auf dem 64 Bit Hyper-V-Terminalserver NICHT funktioniert!!)
Ich habe einiges im Internet gefunden (VBA, Skripts, Batch) - alles schon etliche Jahre alt - eine VBA-Routine probiert - lieferte allerdings einen FTP - Error.
Nachdem ich auf meinem Server nicht experimentieren möchte -->
2) Hat jemand von Euch eine aktuelle Lösung (Skript o. ä.), die auch zuverlässig auf dem 64 Bit-Server funktioniert ?
müsste m.E. etwa so aussehen - soll autom. beim Schliessen/speichern durchgeführt werden:
- Excel-Tabelle als .xlsx UND als HTML speichern
- die HTML-Datei über ein Skript/Batch Uploaden
Vielen Dank
LG
Konfiguration: WIN Terminalserver 2008 R2 (64 Bit !!!) in Hyper-V-Umgebung, Office 2010
Aufgabe:
Excel-Tabelle beim Schliessen/speichern von Excel autom. per FTP auf unserer Website aktualisieren
Die - nachfolgend beschriebene - in Excel eingebaute Variante funktioniert NICHT:
- Excel Tabelle - Bereich markieren
- Datei speichern unter --> entpr. FTP-Pfad auswählen, Dateityp: Webseite, die Option "Auswahl: Tabelle" auswählen
- Speichern
- Username/PW eingeben
Weiter ... und Excel "hängt" - Sanduhr läuft - nach einiger Zeit --> Excel: "keine Rückmeldung"
Kann nur über Taskmanager abgebrochen werden!
1) Funktioniert die obig beschriebene Variante bei EUCH ?
(falls ja, kann es sein, dass dies auf dem 64 Bit Hyper-V-Terminalserver NICHT funktioniert!!)
Ich habe einiges im Internet gefunden (VBA, Skripts, Batch) - alles schon etliche Jahre alt - eine VBA-Routine probiert - lieferte allerdings einen FTP - Error.
Nachdem ich auf meinem Server nicht experimentieren möchte -->
2) Hat jemand von Euch eine aktuelle Lösung (Skript o. ä.), die auch zuverlässig auf dem 64 Bit-Server funktioniert ?
müsste m.E. etwa so aussehen - soll autom. beim Schliessen/speichern durchgeführt werden:
- Excel-Tabelle als .xlsx UND als HTML speichern
- die HTML-Datei über ein Skript/Batch Uploaden
Vielen Dank
LG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 186372
Url: https://administrator.de/contentid/186372
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
17 Kommentare
Neuester Kommentar
Moin,
du könntest auch den FTP via NetDrive einbinden und beim "Speicher unter" direkt auf dem FTP speichern.
Wäre das etwas?
Gruß
du könntest auch den FTP via NetDrive einbinden und beim "Speicher unter" direkt auf dem FTP speichern.
Wäre das etwas?
Gruß
Natürlich habe ich das Programm schon installiert und damit gearbeitet
Auch auf einen Win2003 und Win2008 im Produktivbetrieb!
Und auch schon Dokumente aus Word, Excel und Co. direkt darauf gespeichert.
Meine Aussage mit "ausprobieren" bezug sich lediglich darauf, dass ich nicht nachstellen kann, ob dein spezielles Excel-Dokument sich sauber speichern lässt, ohn nach Zugangsdaten zu fragen.
Ich schlage dir doch kein Tool vor das ich nicht selber benutze oder ausprobiert habe
Du musst bei NetDrive nur drauf achten, dass du den Cache über die Registry auf ein anderes Laufwerk mit bisschen Speicherplatz lägst.
NetDrive speichert bei Problem mit der Verbindung zum FTP die Dateien zwischen im Cache der bei großen Dateien sich entsprechend aufpumpt.
Gruß
Auch auf einen Win2003 und Win2008 im Produktivbetrieb!
Und auch schon Dokumente aus Word, Excel und Co. direkt darauf gespeichert.
Meine Aussage mit "ausprobieren" bezug sich lediglich darauf, dass ich nicht nachstellen kann, ob dein spezielles Excel-Dokument sich sauber speichern lässt, ohn nach Zugangsdaten zu fragen.
Ich schlage dir doch kein Tool vor das ich nicht selber benutze oder ausprobiert habe
Du musst bei NetDrive nur drauf achten, dass du den Cache über die Registry auf ein anderes Laufwerk mit bisschen Speicherplatz lägst.
NetDrive speichert bei Problem mit der Verbindung zum FTP die Dateien zwischen im Cache der bei großen Dateien sich entsprechend aufpumpt.
Gruß
Kannst es über ein externes Programm ja Mal versuchen: CodeTwo AutoLogon
Ich habe gute Erfahrungen damit.
Gruß
Ich habe gute Erfahrungen damit.
Gruß
Das hier funktioniert.
Es wird eine Pdf_Datei aus dem aktiven Sheet und dem festgelegten Druckbereich erstell, im selben Verzeichnis wie die Excel-Datei gespeichert und dann per Ftp auf das angegebene Verzeichnis geladen.
Bei Fehlern:
Firewall für Excel freigeben
FTP Verzeichnis prüfen
Mfg, murdge
'Open the Internet object
Private Declare PtrSafe Function InternetOpen _
Lib "wininet.dll" _
Alias "InternetOpenA" _
(ByVal sAgent As String, _
ByVal lAccessType As LongPtr, _
ByVal sProxyName As String, _
ByVal sProxyBypass As String, _
ByVal lFlags As LongPtr) As Long
'Connect to the network
Private Declare PtrSafe Function InternetConnect _
Lib "wininet.dll" _
Alias "InternetConnectA" _
(ByVal hInternetSession As LongPtr, _
ByVal sServerName As String, _
ByVal nServerPort As Integer, _
ByVal sUsername As String, _
ByVal sPassword As String, _
ByVal lService As LongPtr, _
ByVal lFlags As LongPtr, _
ByVal lContext As Long) As Long
'Get a file using FTP
Private Declare PtrSafe Function FtpGetFile _
Lib "wininet.dll" _
Alias "FtpGetFileA" _
(ByVal hFtpSession As LongPtr, _
ByVal lpszRemoteFile As String, _
ByVal lpszNewFile As String, _
ByVal fFailIfExists As Boolean, _
ByVal dwFlagsAndAttributes As LongPtr, _
ByVal dwFlags As LongPtr, _
ByVal dwContext As LongPtr) As Boolean
'Send a file using FTP
Private Declare PtrSafe Function FtpPutFile _
Lib "wininet.dll" _
Alias "FtpPutFileA" _
(ByVal hFtpSession As LongPtr, _
ByVal lpszLocalFile As String, _
ByVal lpszRemoteFile As String, _
ByVal dwFlags As LongPtr, _
ByVal dwContext As LongPtr) As Boolean
'Close the Internet object
Private Declare PtrSafe Function InternetCloseHandle _
Lib "wininet.dll" _
(ByVal hInet As LongPtr) As Integer
Sub UploadFTP()
Dim pdfName As String
Dim pdfOpenAfterPublish As Boolean
Dim olApp As Object
Dim olOldBody As String
Dim hostFile As String
Dim INet As Long
Dim INetConn As Long
Dim Password As String
Dim RetVal As Long
Dim ServerName As String
Dim Success As Long
Dim UserName As String
Const ASCII_TRANSFER = 1
Const BINARY_TRANSFER = 2
'Rückfragen, ob Datei nach dem Erstellen geöffnet werden soll
If MsgBox("Soll die PDF-Datei nach dem Erstellen angezeigt werden?", vbYesNo, "PDF anzeigen?") = vbYes Then pdfOpenAfterPublish = True
'Pfad und Name der PDF-Datei
pdfName = ThisWorkbook.Path & "\" & ThisWorkbook.Name & "_" & ActiveSheet.Name & ".pdf"
'PDF-Datei erstellen. Funktioniert nur in Excel 2007 oder höher, nicht in Excel 2003 oder älter
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfName, _
Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=IIf(pdfOpenAfterPublish, True, False)
'Boolean-Variable "pdfOpenAfterPublish" zurücksetzen
pdfOpenAfterPublish = False
'Ftp Daten bitte ändern
ServerName = "dein.ftp.de"
UserName = "Dein_Benutzer_Name"
Password = "Dein_Passwort"
'localFile lassen, hostFile "/Test/" an Serververzeichnis anpassen (Verzeichnis muss auf dem Server existieren!)
'Zeigt der Ftp-Zugang direkt auf das Verzweichnis dann: hostFile = ThisWorkbook.Name & "_" & ActiveSheet.Name & ".pdf"
localFile = pdfName
hostFile = "/Test/" & ThisWorkbook.Name & "_" & ActiveSheet.Name & ".pdf"
RetVal = False
INet = InternetOpen("MyFTP Control", 1&, vbNullString, vbNullString, 0&)
If INet > 0 Then
INetConn = InternetConnect(INet, ServerName, 0&, UserName, Password, 1&, 0&, 0&)
If INetConn > 0 Then
'Abfrage kann ausgeblendet werden mit 'If MsgBox.. und beim nächsten 'End If
If MsgBox("Soll die PDF-Datei auf den Server geladen werden?" & vbCrLf & "Gleichnamige Dateien werden überschrieben!", vbYesNo, "PDF hochladen?") = vbYes Then
Success = FtpPutFile(INetConn, localFile, hostFile, BINARY_TRANSFER, 0&)
RetVal = InternetCloseHandle(INetConn)
End If
End If
RetVal = InternetCloseHandle(INet)
End If
If Success <> 0 Then
MsgBox ("Upload erfolgreich beendet!")
Else
MsgBox "Abbruch durch Benutzer oder FTP Server/ Datei Fehler!"
End If
End Sub
Es wird eine Pdf_Datei aus dem aktiven Sheet und dem festgelegten Druckbereich erstell, im selben Verzeichnis wie die Excel-Datei gespeichert und dann per Ftp auf das angegebene Verzeichnis geladen.
Bei Fehlern:
Firewall für Excel freigeben
FTP Verzeichnis prüfen
Mfg, murdge
Ist ja in den neuen Office Versionen wieder aktuell da nur noch Export über Ftp in die Cloud. Ein Nachbar hatte mich danach gefragt. Da habe ich den Code geschrieben. Hat sich dann nicht mehr gemeldet - so hab ich den halt hier hochgeladen.
Deine Frage war ja eigentlich zu Html. Das von Excel generierte ist ja irrsinnig aufgeblasen und Heutzutage wirklich nicht groß zu verwenden.
Aber mann kann auch das mit eigener Kontrolle erledigen z. Bsp.:
lg, murdge
Deine Frage war ja eigentlich zu Html. Das von Excel generierte ist ja irrsinnig aufgeblasen und Heutzutage wirklich nicht groß zu verwenden.
Aber mann kann auch das mit eigener Kontrolle erledigen z. Bsp.:
Sub Test()
'Range festlegen
RangeToHtml Range("A1:C3"), "test.html"
End Sub
Sub RangeToHtml(rng As Range, fileName As String)
Dim resBeg As String
'Hier eigenes Html, also auch responsive möglich
resBeg = "<html><head></head><body><table>"
resEnd = "</table></body></html>"
For i = 1 To rng.Rows.Count
'---Rows---
resBeg = resBeg & "<tr>"
For j = 1 To rng.Columns.Count
'---Columns---
resBeg = resBeg & "<td>"
resBeg = resBeg & rng.Cells(i, j).Value
resBeg = resBeg & "</td>"
Next j
resBeg = resBeg & "</tr>"
Next i
Call SaveStringToFile(resBeg & resEnd, fileName)
End Sub
Sub SaveStringToFile(str As String, fileName As String)
Open fileName For Output As #1
Print #1, str
Close #1
End Sub
lg, murdge