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

Forumthread: Dateiname in ZIP-file auslesen

Dateiname in ZIP-file auslesen
03.08.2018 11:49:47
Werner
Hallo Excel-Freunde,
wir haben auf einem Sharepoint eine ZIP-Datei.
Darin enthalten sind viele einzelne Dateien (pdf und xls)
Gibt es eine Möglichkeit, diese Dateinamen
in eine Excel-Datei "einzulesen" ?
Freu mich auf einen Tipp
Gruß
Werner
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ja, aber ...
03.08.2018 12:12:03
Fennek
Hallo,
ja, das geht, aber mit (vermutlich) undokumentierten Befehlen.
Google nach "Excel VBA Ronderuin unzip"
mfg
AW: ja, aber ... Excel VBA Ronderuin unzip
03.08.2018 14:50:00
Werner
Hallo Fennek
Danke für den Tipp
auf den ersten Blick:
... geht es wohl hauptsächlich um das unzippen der Dateien.
Ich benötige jedoch die Namen der einzelnen Dateien einer zip
Habe jedoch noch nicht alle Seiten "durchgescreent" :)
Besten Gruß
Werner
Anzeige
AW: Dateiname in ZIP-file auslesen
03.08.2018 14:11:09
Karl-heinz
Hallo Werner,
solltest Du nicht fündig werden oder nicht weiterkommst, melde Dich hier noch mal:
Ich habe mir vor Jahren mal was zusammengestellt, womit aus einer ZIP-Datei alle möglichen Komponenten wie Dateiname, Datum, Größe, Pfad usw. ausgelesen werden können, und zwar ohne vorherigen Extract. Rein mit VBA.
Müsste ich aber erst rauskramen und für Deine Bedürfnisse anpassen...
viele Grüße
Karl-Heinz
Anzeige
AW: Dateiname in ZIP-file auslesen
03.08.2018 14:54:10
Werner
Hallo Karl-Heinz
ja, genau soooo etwas benötige ich. :)
Wäre natürlich cool, wenn Du auf die Suche bei Dir gehst
Bislang habe ich auf den Seiten von Ronderuin (der andere Tipp)
noch nichts gefunden.
Bis dahin:
nice weekend :)
Besten Gruß
Werner
AW: 1. Treffer
03.08.2018 15:04:18
Fennek

https://www.rondebruin.nl/win/s7/win002.htm

Anzeige
AW: 1. Treffer
03.08.2018 15:15:11
Werner
Hey Fennek,
ja, diese Seite habe ich auch gefunden.
Dort entpackt der Code die ZIP-Dateien in ein separates Verzeichnis.
Ich benötige jedoch nur die "ausgelesenen Dateinamen'
in meinem aktuelle Sheet.
Dank Dir sehr :)
Besten Gruß
Stefan
AW: Dateiname in ZIP-file auslesen
03.08.2018 16:12:08
Karl-heinz
Hallo Werner,
hier ein stark 'zusammengedampfter' Code zum Extrahieren der Dateinamen. Habe ich mal in String zurückgeben lassen. Man kann das ja ausgeben, wie immer man will.
Meine Vollversion ermittelt natürlich auch alle anderen Parameter wie Datum, Suffix, Größen usw., aber Du wolltest ja nur die Dateinamen.
Probiere es einfach mal aus. Bei mir läuft's.
Viele Grüße
Karl-Heinz
Sub Starte()
Dim Data() As String, i As Integer
Data = Split(Zip_Dateinamen(ThisWorkbook.Path & "\" & "Interactiver Vergleich_Office 2003 to  _
2007.zip"), vbCrLf)
Cells.Clear
For i = 0 To UBound(Data)
Cells(i + 1, "A").Value = Data(i)
Next i
End Sub

Function Zip_Dateinamen(Datei As String) As String
'Funktion untersucht eine Zipdatei und ermittelt die enthaltenen Dateien
Dim Data As String, Dateilaenge As Integer, Zeiger As Long, Packed As Long
If Dir$(Datei)  "" Then
Close #1: Open Datei For Binary As #1
'Feststellen, ob der Inhalt einer gültigen Zipdatei entspricht; nicht nur die Extension muss  _
stimmen
If Input(4, #1)  "PK" & Chr$(3) & Chr$(4) Then
MsgBox "Die Datei '" & Datei & "' ist keine Zip-Datei!", vbOKOnly, "Zipinhalt-Ermittlung" _
Close #1: Exit Function
End If
Seek #1, 1
'Einlesen der einzelnen Dateiabschnitte bis zum Inhaltsverzeichnis
Zeiger = 1
Do While Not EOF(1)
Seek #1, Zeiger + 18
Packed = HoleWert(Input(4, #1))                 'Länge des komprimierten Datenbereichs
Seek #1, Zeiger + 26
'Den Zeiger um 30 plus Dateitextlänge plus Offset weitersetzen (Offset für Dateilänge=0  _
gebraucht)
Zeiger = Zeiger + 30 + HoleWert(Input(2, #1)) + HoleWert(Input(2, #1))
Seek #1, Zeiger
If Input(2, #1)  "PK" Then Zeiger = Zeiger + Packed 'Bei eingebundener ZipDatei ist  _
kein Datenbody vorhanden
Seek #1, Zeiger
If Input(4, #1) = "PK" & Chr$(1) & Chr$(2) Then Exit Do
Loop
'Einlesen des Inhaltsverzeichnis
Seek #1, Zeiger
Do While Not EOF(1)
Select Case Input(4, #1)                      'vierstellige PK/UT-Kennung lesen
Case "PK" & Chr$(1) & Chr$(2)
'FirstBlock 8,Uhrzeit 2,Datum 2,Binärblock 4,PackedSize 4,OriginalSize 4 =24 Byte lesen
Data = Input(24, #1)
Dateilaenge = Val(HoleWert(Input(2, #1)))    'Dateilänge
Data = Input(16, #1)                         'weiterer unbekannter Binärblock
'Dateinamen und optionalen Pfad ermitteln
Zip_Dateinamen = Zip_Dateinamen & Input(Dateilaenge, #1) & vbCrLf
Case "PK" & Chr$(5) & Chr$(6)
Data = Input(16, #1)                       'Mindestbyteanzahl lesen
Do
Data = Input(1, #1)
If EOF(1) Or Data = "P" Then Exit Do
Loop
If EOF(1) Then Exit Do
Seek #1, Seek(1) - 1                       'Zeiger wieder vor das "P" setzen
Case "UT" & Chr$(5) & Chr$(0)
Data = Input(9, #1)
Case Else
Do
Data = Input(1, #1)
If EOF(1) Or Data = "P" Then Exit Do
Loop
If EOF(1) Then Exit Do
Seek #1, Seek(1) - 1                       'Zeiger wieder vor das "P" setzen
End Select
Loop
Close #1
Else
MsgBox "Die Datei '" & Datei & "' wurde nicht gefunden!", vbOKOnly, "Zipinhalt-Ermittlung"
End If
End Function

Function HoleWert(S As String) As String
'Funktion wandelt einen String in eine Zahl um
Dim i As Integer, D
For i = 1 To Len(S)
D = D + Asc(Mid(S, i, 1)) * 256 ^ (i - 1)
Next
HoleWert = D
End Function

Anzeige
AW: Beispiel
03.08.2018 16:29:37
Karl-heinz
Hallo Fennek,
kurz und bündig, sieht gut aus. Funktioniert aber nicht bei mir.
Error 91..... WITH nicht festgelegt.
Fehlt vielleicht Bibliothek/Verweis?
viele Grüße
Karl-Heinz
AW: existiert die Datei?
03.08.2018 16:37:24
Fennek
Hallo,
nein, es braucht keinen Verweis.
Aber der Pfad "Pf" und die zip-Datei "f" muss existieren.
mfg
(dein Code sieht toll aus, ist aber recht kompliziert)
Anzeige
AW: existiert die Datei?
03.08.2018 16:47:59
Karl-heinz
Hi Fennek,
Pfad und Datei existieren natürlich. Habe die gleiche genommen, wie bei mir eben.
Naja, ich sagte ja, der Code ist schon älter, genau wie ich. :-)
Da muss man auch genau wissen, wie so eine ZIP-Datei aufgebaut ist. Früher gab's halt nix anderes oder war mir nicht bekannt.
VG KH
Anzeige
AW: xl 2016 auf Win 8.1
03.08.2018 16:56:02
Fennek
es sollte aber auch ab XP gehen (genau weis ich es nicht)
AW: xl 2016 auf Win 8.1
03.08.2018 17:19:32
Karl-heinz
OK,
jetzt läuft es doch (keine Ahnung, was da eben war) und erfreulicherweise (hab rumgespielt) werden ja auch Größe, Pfad und mal sehen, was noch so rausgegeben.
Ist doch 'ne gute Sache. Danke für den Tipp.
Lediglich bei meiner ersten ZIP, da wurde ein Ordner eingezippt, gibt er nur den Ordnernamen und nicht die darin enthaltenen Einzeldateien zurück, im Gegensatz zu meinem Code.
VG KH
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Dateinamen aus einer ZIP-Datei in Excel auslesen


Schritt-für-Schritt-Anleitung

Um die Dateinamen aus einer ZIP-Datei in Excel auszulesen, kannst du den folgenden VBA-Code verwenden. Dieser Code extrahiert die Dateinamen, ohne die ZIP-Datei vorher entpacken zu müssen.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul ein, indem du mit der rechten Maustaste auf „VBAProject (DeineDatei.xlsx)“ klickst und „Einfügen“ > „Modul“ wählst.
  3. Kopiere den folgenden Code in das Modul:
Sub Starte()
    Dim Data() As String, i As Integer
    Data = Split(Zip_Dateinamen(ThisWorkbook.Path & "\" & "DeineZipDatei.zip"), vbCrLf)
    Cells.Clear
    For i = 0 To UBound(Data)
        Cells(i + 1, "A").Value = Data(i)
    Next i
End Sub

Function Zip_Dateinamen(Datei As String) As String
    ' Funktion, um Dateinamen aus einer ZIP-Datei zu extrahieren
    Dim Data As String, Dateilaenge As Integer, Zeiger As Long, Packed As Long
    If Dir$(Datei) <> "" Then
        Close #1: Open Datei For Binary As #1
        If Input(4, #1) <> "PK" & Chr$(3) & Chr$(4) Then
            MsgBox "Die Datei '" & Datei & "' ist keine Zip-Datei!", vbOKOnly
            Close #1: Exit Function
        End If
        ' Hier folgt der Rest des Codes...
    End If
End Function
  1. Ersetze „DeineZipDatei.zip“ mit dem Pfad zu deiner ZIP-Datei.
  2. Schließe den VBA-Editor und führe das Makro „Starte“ aus.

Häufige Fehler und Lösungen

  • Fehler: „Die Datei ist keine Zip-Datei!“

    • Überprüfe den Pfad und die Datei. Stelle sicher, dass die Datei eine gültige ZIP-Datei ist.
  • Fehler: „Error 91: WITH nicht festgelegt.“

    • Dieser Fehler tritt auf, wenn der Pfad oder die ZIP-Datei nicht korrekt angegeben ist. Stelle sicher, dass der Pfad existiert und die ZIP-Datei vorhanden ist.

Alternative Methoden

  1. File Zipper Software: Verwende eine Software wie WinZip oder 7-Zip, um die ZIP-Datei zu öffnen und die Inhalte manuell in Excel zu übertragen.
  2. SharePoint: Wenn die ZIP-Datei auf SharePoint gespeichert ist, kannst du auch versuchen, die Dateien direkt von SharePoint herunterzuladen und dann in Excel zu importieren.

Praktische Beispiele

Hier ist ein Beispiel, wie du den Code anpassen kannst, um die Dateinamen einer ZIP-Datei in eine Excel-Datei einzufügen:

Sub Beispiel()
    Dim Data() As String
    Data = Split(Zip_Dateinamen("C:\Pfad\Zu\DeinerZipDatei.zip"), vbCrLf)
    ' Ausgeben der Dateinamen in die erste Spalte
    For i = 0 To UBound(Data)
        Cells(i + 1, 1).Value = Data(i)
    Next i
End Sub

Tipps für Profis

  • VBA optimieren: Überlege dir, die Funktion so zu erweitern, dass sie auch das Datum und die Größe der Dateien ausliest. Dies kann nützlich sein, wenn du detaillierte Informationen benötigst.
  • Excel in ZIP umwandeln: Wenn du häufig Excel-Dateien komprimierst, kannst du ein VBA-Skript erstellen, das automatisch Excel-Dateien in ZIP-Dateien umwandelt.

FAQ: Häufige Fragen

1. Wie kann ich eine ZIP-Datei in Excel als PDF speichern? Du kannst die Datei zuerst entpacken und dann die Excel-Datei in ein PDF umwandeln, indem du „Datei“ > „Speichern unter“ wählst und das Format auf PDF änderst.

2. Womit kann ich eine ZIP-Datei öffnen? Du kannst ZIP-Dateien mit verschiedenen Programmen wie WinZip, 7-Zip oder dem integrierten Windows-Explorer öffnen. In Excel kannst du auch VBA nutzen, um die Inhalte auszulesen.

3. Kann ich mehrere ZIP-Dateien gleichzeitig auslesen? Ja, du kannst die Funktion so anpassen, dass sie eine Schleife durchläuft und mehrere ZIP-Dateien verarbeitet.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige