Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1380to1384
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
Inhaltsverzeichnis

gzip stream in VBA entpacken

gzip stream in VBA entpacken
05.09.2014 22:24:32
Stephan

Hallo Leute,
ich komme mal wieder nicht weiter. Hoffe jemand hier kann mit helfen.
Erstmal mein Problem:
Ich rufe über XMLHTTP einen WebService auf der mir Daten zurück liefert.
Das funktioniert solange ich im Request Header keine GZIP encoding aktiviere, was aber zu großem Datenvolumen führt.
Sobald ich im Header "Accept-Encoding", "gzip, deflate" aktiviere, bekomme ich einen gzip komprimierten String den ich in VBA entpacken möchte.
Gibt es da einen Weg das mit VBA Bordmitteln hinzubekommen ?
Zu VB und .Net hab ich ganz viel gefunden, aber bei VBA bislang fehlanzeige.

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: gzip stream in VBA entpacken
05.09.2014 22:52:20
mumpel
Hallo!
VB-Code liese sich auf VBA umschreiben. Wo hast Du für VB ein Beispiel gefunden?
Gruß, René

AW: gzip stream in VBA entpacken
06.09.2014 12:04:58
Stephan
Hi Rene,
das besste Beispiel für .Net ist hier zu finden.
http://weblog.west-wind.com/posts/2007/Jun/29/HttpWebRequest-and-GZip-Http-Responses
Stream responseStream = responseStream = WebResponse.GetResponseStream();
if (WebResponse.ContentEncoding.ToLower().Contains("gzip"))
responseStream = new GZipStream(responseStream, CompressionMode.Decompress);
Wenn ich es richtig verstehe ist das hauptproblem, dass
"System.IO.Compression.GZipStream"
nicht erkannt wird und ich die richtige Referenz hierzu nicht habe.
Gruß
Stephan

Anzeige
AW: gzip stream in VBA entpacken
06.09.2014 13:42:45
mumpel
.Net nützt mir nichts, ich brauche Beispiele für VB.

AW: gzip stream in VBA entpacken
06.09.2014 18:33:02
Stephan
Ok,
war mir nicht so ganz klar.
Hier die Referenz bei Microsoft mit VB Beispielcode.
http://msdn.microsoft.com/de-de/library/system.io.compression.gzipstream%28v=vs.110%29.aspx

Imports System.IO
Imports System.IO.Compression
Module Module1
Sub Main()
Dim directoryPath As String = "c:\users\public\reports"
Dim directorySelected As DirectoryInfo = New DirectoryInfo(directoryPath)
For Each fileToCompress As FileInfo In directorySelected.GetFiles()
Compress(fileToCompress)
Next
For Each fileToDecompress As FileInfo In directorySelected.GetFiles("*.gz")
Decompress(fileToDecompress)
Next
End Sub
Private Sub Compress(ByVal fileToCompress As FileInfo)
Using originalFileStream As FileStream = fileToCompress.OpenRead()
If (File.GetAttributes(fileToCompress.FullName) And FileAttributes.Hidden) <>  _
FileAttributes.Hidden And fileToCompress.Extension <> ".gz" Then
Using compressedFileStream As FileStream = File.Create(fileToCompress.FullName + _
".gz")
Using compressionStream As GZipStream = New GZipStream(compressedFileStream, _
CompressionMode.Compress)
originalFileStream.CopyTo(compressionStream)
Console.WriteLine("Compressed {0} from {1} to {2} bytes.", _
fileToCompress.Name, fileToCompress.Length.ToString(), _
compressedFileStream.Length.ToString())
End Using
End Using
End If
End Using
End Sub
Private Sub Decompress(ByVal fileToDecompress As FileInfo)
Using originalFileStream As FileStream = fileToDecompress.OpenRead()
Dim currentFileName As String = fileToDecompress.FullName
Dim newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress. _
Extension.Length)
Using decompressedFileStream As FileStream = File.Create(newFileName)
Using decompressionStream As GZipStream = New GZipStream(originalFileStream,  _
CompressionMode.Decompress)
decompressionStream.CopyTo(decompressedFileStream)
Console.WriteLine("Decompressed: {0}", fileToDecompress.Name)
End Using
End Using
End Using
End Sub
End Module

Anzeige
AW: gzip stream in VBA entpacken
06.09.2014 19:47:32
mumpel
Am Besten wäre die Nutzung der "7za.exe" (gehört zu 7Zip). Damit wäre es einfacher und kürzer. Informationen über "7za.exe" bekommst Du im Internet.
Ein kleines Beispiel dazu.
Private Sub CommandButton7_Click()

Rem ... Hier steht noch anderer Code 

               If OptionButton1.Value = True Then
                  strZipPath = tbxFilePathLF
                  strZipName = "access_logfile_" & strEDate & ".txt.gz"
               ElseIf OptionButton2.Value = True Then
                  strZipPath = tbxFilePathLF
                  strZipName = "error_logfile_" & strEDate & ".txt.gz"
                  errorLogFile = Split(strURL, "file=")
                  errorFile = Split(errorLogFile(1), ".")
               End If
               
            CopyURLToFile strURL, strZipPath & strZipName
            DeleteUrlCacheEntry (strURL)
            
            Exit For
         End If
    Next objLink


    On Error GoTo Fin
    
    strZip = ThisWorkbook.Path & "\7za.exe"
    strPathZ = tbxFilePathLF
    gzFile = strZipPath & strZipName
    strFileName = gzFile
    strArg = strZip & " e -pHIDE " & strFileName & " -y -o" & strZipPath
    
    ShellAndWait strArg
    
Rem ... Hier steht auch noch anderer Code 

End Sub

Private Sub ShellAndWait(ByVal strPathName As String)
    Dim WshShell As Object
    On Error GoTo Fin
    Set WshShell = CreateObject("WScript.Shell")
    WshShell.Run strPathName, 0, True
Fin:
    Set WshShell = Nothing
    If Err.Number <> 0 Then MsgBox "Error: " & _
        Err.Number & " " & Err.Description
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 15

Anzeige
AW: gzip stream in VBA entpacken
07.09.2014 10:26:23
Stephan
Danke erstmal für den Tipp.
Im Grundsatz verfolge ich inzwischen auch eher den Weg des Abspeichern, extern wandeln und wieder einlesen.
Ich hatte 7zip installiert, aber keine 7za.exe dabei. Jetzt hab ich mir die neueste Version auch wieder runtergeladen aber da ist auch keine 7za.exe dabei. Kann es sein, das die inzwischen 7z.exe heist und das Kommandozeilen tool ist ?
2. Ich hab den Response mit Fiddler abgespeichert und mit 7z versucht die Datei zu entpacken. Da sagt er mir dauernd das die Datei ein falsches Format hat. Komischerweise kann Fiddler den Response aber problemlos in ein JSON file wandeln.
Ich verzweifel echt noch..
Gruß
Stephan

Anzeige
AW: gzip stream in VBA entpacken
07.09.2014 17:47:25
Stephan
Danke.
ich werde mein Glück mal versuchen.
Aktuell sieht es so aus, als wenn die Response kein ordentliches GZIP file ist und ich das erst noch irgendwie anders konvertieren muss.
Alles sehr mühselig.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige