Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

mit excel makro bestimmte datei in zip datei entpacken

Forumthread: mit excel makro bestimmte datei in zip datei entpacken

mit excel makro bestimmte datei in zip datei entpacken
23.07.2024 12:27:22
Skydog
Hallo liebe Excel Gemeinde,

ich habe eine zip Datei mit mehreren Ordner/Unterordern und ca. 13.000 Dateien. Von diesen Dateien benötige ich aber nur eine Datei, die in einem Unterordner ist.

Bisher entpacke ich die ZIP Datei (1,1 GB) über VBA in einem Temp-Ordner und kopiere dann die gewünschte Datei in einen Ordner. Anschließend wird der Temp-Ordner gelöscht. Dies funktioniert soweit einwandfrei.

Nun mein Problem: Aufgrund der Anzahl der Dateien dauert das Entpacken ca. 15 Minuten. Ist es möglich, in der ZIP-Datei lediglich die von mir benötigte Datei (welche sich immer im gleichen Ordner/Unterordner in der zip Datei befindet) zu entpacken?

Vielen Dank für Eure Bemühungen.

Viele Grüße
Werner
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mit excel makro bestimmte datei in zip datei entpacken
23.07.2024 14:06:52
peter
Hallo

Ja, das geht. Zeig mal Deinen Code zum Extrahieren der Dateien.

Peter
AW: mit excel makro bestimmte datei in zip datei entpacken
23.07.2024 14:16:57
Yal
Hallo Werner,

eigentlich kannst Du im Datei-Explorer unter Windows innerhalb der Zip navigieren und gezielt die eine Datei kopieren und in ein ungezipten Verzeichnis ablegen. So ist die Datei -und nur diese Datei- damit "entpackt".

VG
Yal
Anzeige
AW: mit excel makro bestimmte datei in zip datei entpacken
23.07.2024 14:19:02
volti
Hallo Werner,

das ist sicher möglich. Vielleicht hilft Dir dieses Makro hier schon weiter und ggf. noch was zum Lesen.

https://www.clever-excel-forum.de/Thread-Ein-Auszippen-Loeschen-und-Auflisten-ohne-Zip-Programm

Ob auch Unterordner möglich sind, habe ich noch nicht getestet. Kann man/ich vielleicht noch nachholen, wenn ich wieder Zeit habe.
Evtl. gibt es auch noch eine Direktvariante. Weiß ich gerade nicht.

Code:


Private Declare PtrSafe Function SHCreateDirectoryExW Lib "Shell32.dll" ( _ ByVal hWnd As LongPtr, ByVal pszPath As LongPtr, _ ByVal psa As LongPtr) As Long Sub Zip_Extract(ByVal vZipDatei As Variant, ByVal sZielPfad As String, _ ByVal sDatei As String) ' Eine Dateien aus einer vZipDatei nach sZielPfad extrahieren Dim oItem As Object If Dir$(vZipDatei) <> "" Then ' Ist Zip-Datei vorhanden? SHCreateDirectoryExW 0&, StrPtr(sZielPfad), 0& ' Ggf. Zielordner erstellen With CreateObject("Shell.Application") For Each oItem In .Namespace(vZipDatei).Items If oItem.Name Like sDatei Then .Namespace((sZielPfad)).CopyHere oItem End If Next oItem End With End If End Sub Sub Test() Zip_Extract "D:\MyZip.zip", "D:\ZipTest", "Kreuzchen.xlsm" End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz
Anzeige
Also - das geht auf diese...
23.07.2024 22:15:51
Case
Moin, :-)

... Art ganz gut: ;-)

Shell """F:\7-ZipPortable\App\7-Zip64\7z.exe"" e -r  C:\Temp\herb.zip -oF:\test Export_aus_SQL.xlsx"


F:\7-ZipPortable\App\7-Zip64\7z.exe
Das ist der Pfad zu 7z.exe. Ist die Portable Version, also keine Installation erforderlich.

e -r C:\Temp\herb.zip
Der Parameter e steht für "Extract". Der Parameter -r ist WICHTIG. Der geht rekursiv durch die Verzeichnisse in der Zip-Datei.
Pfad- und Dateiname der Zip-Datei dürfte klar sein.

-oF:\test Export_aus_SQL.xlsx
Der Parameter -o bedeutet "Set Output Directory". Dann kommt der Pfad, wo die Datei abgelegt wird. Leerzeichen und der Dateiname der Exceldatei.
Nach -o KEIN Leerzeichen.

Hier die Liste der Parameter:
https://documentation.help/7-Zip/syntax.htm

Der Parameter -aoa ist noch sinnvoll, wenn die Datei(en) schon/noch vorhanden sind. Werden dann ungefragt überschrieben.

Ich habe es eben noch getestet (Windows 11 mit 64 Bit) mit vielen Unterordnern in der Zip-Datei. Klappt. ;-)

Habe auch einiges mit "Shell und Namespace" rumprobiert. War mir aber bei Unterordnern zu aufwändig.

Du brauchst nur die Datei "7z.exe" aus dem Unterordner "\App\" und dann halt die richtige Version..

Zur Geschwindigkeit kann ich nichts sagen. ;-)

Servus
Case
Anzeige
AW: mit excel makro bestimmte datei in zip datei entpacken
25.07.2024 11:59:08
Skydog
Hallo zusammen,

vielen Dank für Eure Bemühungen und sorry, dass ich jetzt erst antworte.

@Peter:
Hier mein Code
Sub Unzip()
Dim FSO As Object
Dim oApp As Object
Dim Fname As Variant
Dim FileNameFolder As Variant
Dim DefPath As String

Fname = ActiveWorkbook.Path & "\NSB\" & Profil & "\Data.zip"
MkDir ActiveWorkbook.Path & "\NSB\" & Profil & "\Temp\"
DefPath = ActiveWorkbook.Path & "\NSB\" & Profil & "\Temp\"

FileNameFolder = DefPath
'Dateien antpacken
Set oApp = CreateObject("Shell.Application")
oApp.Namespace(FileNameFolder).CopyHere oApp.Namespace(Fname).Items

On Error Resume Next
Set FSO = CreateObject("scripting.filesystemobject")
FSO.DeleteFolder Environ("Temp") & "\Temporary Directory*", True

End Sub

@Yal:
Wäre möglich, aber ich wollte nicht manuell die Datei entpacken.

@Case

Ich glaube, Deine Lösung sieht für mich am sinnvollsten aus. Habe dies entsprechend mal eingebaut. Leider weiss ich nicht, wie und wo ich den Pfad für die erwünschte Datei in der zip-Datei angeben muss. Zur Zeit öffnet mir der Code nur 7Z portable und dort den Dokumente Ordner, obwohl ich den Pfad der zip-Datei angegeben habe.
Kannst Du mir evtl. weiterhelfen?

Nochmals vielen Dank an alle.

Viele Grüße
Werner
Anzeige
Den Pfad für die...
25.07.2024 12:18:01
Case
Moin, :-)

... gewünschte Datei in der Zip-Datei musst du nicht angeben, da er rekursiv (mit -r) durch alle Unterordner in der Zip-Datei durchgeht. Du brauchst nur den Namen der Datei welche du extrahieren möchtest. Schau dir mein Beispiel (getestet) an - und die Hinweise.

Servus
Case
Anzeige
AW: Den Pfad für die...
25.07.2024 16:20:19
Skydog
Hallo Case,

habe es hinbekommen. Funktioniert genauso, wie ich es mir vorgestellt habe. Die erwünschte Datei ist in einer Sekunde im richtigen Ordner extrahiert.

Super, vielen Dank.

Mit freundlichen Grüßen

Werner
AW: Den Pfad für die...
26.07.2024 09:33:19
Skydog
Hallo Case,

habe doch noch eine Frage...

Die Pfadangabe der Zip-Datei und des Output Directory würde ich gerne als Variable einbinden, da sich der Pfad monatlich ändert, z.B.

Fname = ActiveWorkbook.Path & "\NSB_072024\Data.zip"
DefPath = ActiveWorkbook.Path & "\Daten_072024"


Shell """F:\7-ZipPortable\App\7-Zip64\7z.exe"" e -r Fname -oDefPath Data.xlsx"

Gibt es hierfür auch einen Trick?

Danke für Deine Bemühungen.

Mit freundlichen Grüßen

Werner
Anzeige
Das würde dann...
26.07.2024 10:06:55
Case
Moin, :-)

... so gehen (getetstet):

Shell """F:\7z.exe"" e -r -aoa" & Fname & " -o" & DefPath


Habe noch den Parameter (-aoa) fürs Überschreiben ohne Nachfrage mit aufgenommen. ;-)

Servus
Case
Anzeige
AW: Das würde dann...
26.07.2024 10:20:44
Skydog
Super, jetzt ist es perfekt.

Tausend Dank

Viele Grüße

Werner
FEHLER...
26.07.2024 10:23:07
Case
Moin, :-)

... von mir - ein Leerzeichen zu wenig (nach -aoa): ;-)

Shell """F:\7z.exe"" e -r -aoa " & Fname & " -o" & DefPath


Servus
Case
Anzeige
Und wenn du nur...
26.07.2024 10:16:25
Case
Moin, :-)

... den Pfad (wo die entpackte Datei hin soll) in der Variablen hast, dann so: ;-)

Shell """F:\7z.exe"" e -r -aoa " & Fname & " -o" & DefPath & " PQ_Pow.xlsx"


Auch getestet. ;-)

Servus
Case
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige