Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema OptionButton
BildScreenshot zu OptionButton OptionButton-Seite mit Beispielarbeitsmappe aufrufen

gzip stream in VBA entpacken

Betrifft: gzip stream in VBA entpacken von: Stephan
Geschrieben am: 05.09.2014 22:24:32

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.

  

Betrifft: AW: gzip stream in VBA entpacken von: mumpel
Geschrieben am: 05.09.2014 22:52:20

Hallo!

VB-Code liese sich auf VBA umschreiben. Wo hast Du für VB ein Beispiel gefunden?

Gruß, René


  

Betrifft: AW: gzip stream in VBA entpacken von: Stephan
Geschrieben am: 06.09.2014 12:04:58

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


  

Betrifft: AW: gzip stream in VBA entpacken von: mumpel
Geschrieben am: 06.09.2014 13:42:45

.Net nützt mir nichts, ich brauche Beispiele für VB.


  

Betrifft: AW: gzip stream in VBA entpacken von: Stephan
Geschrieben am: 06.09.2014 18:33:02

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




  

Betrifft: AW: gzip stream in VBA entpacken von: mumpel
Geschrieben am: 06.09.2014 19:47:32

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



  

Betrifft: AW: gzip stream in VBA entpacken von: Stephan
Geschrieben am: 07.09.2014 10:26:23

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


  

Betrifft: AW: gzip stream in VBA entpacken von: mumpel
Geschrieben am: 07.09.2014 13:57:48

7za.exe gibt es noch. https://www.herber.de/bbs/user/92508.zip


  

Betrifft: AW: gzip stream in VBA entpacken von: Stephan
Geschrieben am: 07.09.2014 17:47:25

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.


 

Beiträge aus den Excel-Beispielen zum Thema "gzip stream in VBA entpacken"