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

Forumthread: Exif auslesen - bzw. Daten aus der Datei

Exif auslesen - bzw. Daten aus der Datei
KLE
Hallo,
ich möchte gern mein riesiges (ca. 250.000 Fotos) Fotoarchiv neu Strukturieren. Daher habe ich jetzt mir gedacht, ich nutze einfach einige Infos aus den Dateien und erstelle mir daraus eine neue Struktur-Ordnung für die Archivierung.
Dazu habe ich mir ein kleines Tool gebastelt (z.T. auf Elemente von Hajo & Co.), welches mir Verzeichnisse einliest mit folgenden Daten:
- Verzeichnis-Pfad
- Datei-Größe in KB
- Datei-Datum (Erstellung)
- Datei-Typ
Im Explorer kann ich mir noch andere Infos ziehen - wie z.B. die Auflösung, die Pixelzahl, das Ursprungsdatum etc. und aus der EXIF-Datei-Information noch einige viele (für mich interessante und wichtige Infos)...
Doch ich bin nach ca. 6h Google-Suche nicht wirklich fündig geworden, wie ich aus Excel heraus auf die EXIF-Daten zugreifen kann. Habe einige VB-Scripts gefunden - aber dafür reichen meine Kenntnisse einfach nicht aus, daraud VBA zu machen...
Kann mir hier jemand helfen ?! Was benötige ich dazu, um an die EXIF-Daten zu kommen ? Wo kann ich nähere Hilfen oder Codes finden, um mit Excel-VBA diese Daten zurückzugreifen...
Ich bin zwar inzwischen selbstbewusster mit VBA unterwegs und probiere viel - wenn auch noch bei weitem nicht so professionell wie ihr - funktionieren am Ende die gebastelten Werke von mir - dank Eurer Hilfe - meist ziemlich gut. Daher brauche ich wirklich Hilfe - was ich wie machen müsste, da ich bezüglich auf den Zugriff von Datei-Informationen außerhalb der "Klassischen" Datei-Infos noch nie was gemacht habe...
Gruß und einen wundervollen 4. Advent wünsche ich EUCH LIEBEN ALLEN !;o)
Kay
Anzeige
AW: Exif auslesen - bzw. Daten aus der Datei
19.12.2010 12:48:00
Anton
Hallo Kay,
probier sowas(bei 250000 Dateien wird es dauern...):
Code:

Dim i As Long  
Sub dateien_auflisten()
  Dim objShell, objFolder
  Dim BrowseDir, varName
  Set objShell = CreateObject("Shell.Application")  
  Set BrowseDir = objShell.BrowseForFolder(0, "Ordner auswählen", &H1000, 17)  
  If Not BrowseDir Is Nothing Then    
    Application.ScreenUpdating = False
    Cells.Clear
    i = 0
    Set objFolder = objShell.Namespace(BrowseDir.items().Item().Path)
    i = i + 1
    Cells(i, 1) = "Pfad"
    For k = 1 To 50  
      Cells(i, k + 1) = objFolder.GetDetailsOf(, k)
    Next
    Set objFolder = Nothing  
    If MsgBox("Unterordner duchsuchen?", vbYesNo, "Abfrage") = vbYes Then  
      rekursiv BrowseDir.items().Item().Path, True
    Else
      rekursiv BrowseDir.items().Item().Path, False
    End If  
    Application.ScreenUpdating = True
    Columns.AutoFit
  End If  
  Set objShell = Nothing  
  Rows("1:1").Font.Bold = True
  Range("B2").Select  
  ActiveWindow.FreezePanes = True
  Application.StatusBar = False
End Sub  
Function rekursiv(ordner, unterordner As Boolean)  
  Set objShell = CreateObject("Shell.Application")  
  Set objFolder = objShell.Namespace(ordner)
  For Each varName In objFolder.items  
    If varName.Type = "Dateiordner" And unterordner = True Then    
      rekursiv varName.Path, True
    ElseIf varName.Type <> "Dateiordner" Then    
      i = i + 1
      Cells(i, 1) = varName.Path
      Application.StatusBar = varName.Path
      For k = 1 To 50  
        Cells(i, k + 1) = objFolder.GetDetailsOf(varName, k)
      Next
    End If  
  Next
  Set objFolder = Nothing  
End Function  


mfg Anton
Anzeige
Schon weiter, nur Exif auslesen noch offen.
19.12.2010 16:53:27
KLE
Hallo und vielen Dank für Eure antworten. Nun, ich werde es mit Deinem Code probieren - nur etwas umschreiben, da ich nicht alle Felder benötige (spart vielleicht ein kleinwenig Zeit ;o)!). Der Link zu dem Tool ist auch interessant - auch diesen werde ich mir näher anschauen - Datei bereits runtergeladen. Nur mit dem EXIF-Auslesen - da habt ihr auch keinen Ansatz für mich, oder ?!? Gruß Kay PS: Leider hat meine Tastatur grad ein Schaden, kann kein Enter etc. mehr drücken - wollte aber noch schnell antworten ;o)
Anzeige
AW: Schon weiter, nur Exif auslesen noch offen.
19.12.2010 18:31:17
Tino
Hallo,
kannst mal so versuchen.
Beispiel:
Sub Beispiel()
Dim strFile$, i%, sInhalt$
Dim objShell As Object, objFolder As Object, objFile As Object
strFile = "E:\Bilder\DSC03697_.jpg" 'Pfad zum Bild
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(Left$(strFile, InStrRev(strFile, "\")))
Set objFile = objFolder.ParseName(Right$(strFile, Len(strFile) - InStrRev(strFile, "\")))
'On Error Resume Next
For i = 0 To 300
sInhalt = Trim$(objFolder.GetDetailsOf(objFile, i))
If sInhalt  "" Then
Debug.Print sInhalt, i
End If
Next i
End Sub
Die entsprechende Infos musst Du Dir ermitteln und den entsprechenden Index abfragen.
Gruß Tino
Anzeige
AW: Schon weiter, nur Exif auslesen noch offen.
20.12.2010 02:14:07
KLE
Super, Danke Tino !
...damit kann ich schon einige Infos mehr analysieren, was mir für meine Archivierungsdatenbank enorm hilft.
Nur eine Frage habe ich noch...kann man und wenn ja mit welchem Befehl - die Bezeichnung der einzelnen Nummern ermitteln, bzw. ausgeben ?
D.h. z.B. neben der Zahl 236 = Brennweite ?! usw. ?!?
Gruß
Kay
Anzeige
AW: Schon weiter, nur Exif auslesen noch offen.
20.12.2010 03:09:40
KLE
Sorry, habe es grad mit einwenig probieren selbst rausbekommen ;o)
objFolder.GetDetailsOf(Name, i)
Gruß und Danke!
Kay
AW: Schon weiter, nur Exif auslesen noch offen.
19.12.2010 18:39:20
Reinhard
Hallo Kle,
lt. Wiki ist Exif bei jpgs von Digitalkameras drin und das sind Daten die im Header der jpg stehen.
Wenn die der dir gezeigte Code nicht auslesen kann muß man halt die Datei anders auslesen.
Dazu muß man nur das jpg-Dateiformat mit enthaltenen Exif Daten kennen.
Es gibt eine Webseite, die heißt whatis.org watis.org oder so ähnlich, da findet man Dateiformate für viele Dateiendungen.
Mit diesem Wissen knn es klappen, dann Code dafür zu erstellen.
Du sprachst von VB-Code. Zeige den mal.
Vielleicht hilft dir dieses Link auch etwas:
http://www.foto-freeware.de/exifer.php
So wie ich das flüchtig gelesen habe müßte er die Exifsdaten auslesen können und kann auch Batchverabeitung, was für mich heißt er kann auch mehrere Dateien nacheinander auslesen.
Wenn er dann diese Daten exportieren kann, ich nehme als Textdateie(en), kann man mit Excel sehr leicht diese txt-Dateien auslesen.
Gruß
Reinhard
Anzeige
AW: Schon weiter, nur Exif auslesen noch offen.
20.12.2010 02:16:47
KLE
Vielen Dank Reinhard,
...ich werde Dir/Euch meine Datei, wenn ich Sie fertig habe incl. der Codes hier einstellen. Damit alle was von haben. Werde mich mit der Info von Tino und von den Seiten, die Du mir grad als Anregung vermittelt hast was basteln können... Danke bereits an dieser Stelle für Eure Zeit und Anregungen !!!
Gruß
Kay
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Exif-Daten auslesen in Excel mit VBA


Schritt-für-Schritt-Anleitung

Um Exif-Daten aus Bildern in Excel auszulesen, kannst Du das folgende VBA-Skript verwenden. Dieses Skript ermöglicht es Dir, verschiedene Informationen wie die Datei-Größe und das Erstellungsdatum aus den Bildern zu extrahieren.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Gehe zu Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Kopiere und füge den folgenden Code ein:
Sub dateien_auflisten()
    Dim objShell As Object, objFolder As Object
    Dim BrowseDir As Object, varName As Variant
    Dim i As Long

    Set objShell = CreateObject("Shell.Application")
    Set BrowseDir = objShell.BrowseForFolder(0, "Ordner auswählen", &H1000, 17)

    If Not BrowseDir Is Nothing Then
        Application.ScreenUpdating = False
        Cells.Clear
        i = 0
        Set objFolder = objShell.Namespace(BrowseDir.items().Item().Path)
        i = i + 1
        Cells(i, 1) = "Pfad"

        For k = 1 To 50
            Cells(i, k + 1) = objFolder.GetDetailsOf(, k)
        Next k

        Set objFolder = Nothing
        Application.ScreenUpdating = True
        Columns.AutoFit
    End If
    Set objShell = Nothing
End Sub
  1. Schließe den VBA-Editor und kehre zu Excel zurück.
  2. Führe das Makro aus, um die Bildinformationen auszulesen.

Häufige Fehler und Lösungen

  • Fehler: "Objekt nicht gefunden"
    Lösung: Stelle sicher, dass Du den richtigen Pfad zum Bild angegeben hast. Überprüfe den Dateinamen und die Erweiterung.

  • Problem mit der Anzeige der Exif-Daten
    Lösung: Die Exif-Daten sind oft nicht direkt sichtbar. Du kannst den Index von 0 bis 300 durchlaufen, um die verschiedenen Informationen zu finden.

  • Keine Berechtigungen zum Zugriff auf den Ordner
    Lösung: Stelle sicher, dass Du die notwendigen Berechtigungen für den entsprechenden Ordner hast.


Alternative Methoden

Wenn Du keinen VBA-Code verwenden möchtest, gibt es auch einige Software-Tools, die helfen können, Exif-Daten auszulesen:

  • ExifTool: Ein mächtiges Tool, das eine Vielzahl von Exif-Daten auslesen und exportieren kann.
  • Online-Dienste: Es gibt zahlreiche Websites, die es ermöglichen, JPG-Metadaten auszulesen und die Informationen anzuzeigen.

Praktische Beispiele

Hier ein Beispiel, wie Du Exif-Daten für eine bestimmte Datei auslesen kannst:

Sub Beispiel()
    Dim strFile As String, i As Integer, sInhalt As String
    Dim objShell As Object, objFolder As Object, objFile As Object

    strFile = "E:\Bilder\DSC03697_.jpg" ' Pfad zum Bild
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(Left$(strFile, InStrRev(strFile, "\")))
    Set objFile = objFolder.ParseName(Right$(strFile, Len(strFile) - InStrRev(strFile, "\")))

    For i = 0 To 300
        sInhalt = Trim$(objFolder.GetDetailsOf(objFile, i))
        If sInhalt <> "" Then
            Debug.Print sInhalt, i
        End If
    Next i
End Sub

Tipps für Profis

  • Nutze Debug.Print, um die Exif-Daten im Direktfenster des VBA-Editors anzuzeigen und die Indizes der gewünschten Informationen herauszufinden.
  • Experimentiere mit der ObjShell.BrowseForFolder-Methode, um benutzerfreundliche Dialoge zur Auswahl von Verzeichnissen zu erstellen.
  • Halte Deine VBA-Skripte sauber und gut dokumentiert, um die Wartbarkeit zu erhöhen.

FAQ: Häufige Fragen

1. Wie kann ich die Bezeichnungen der Exif-Daten ermitteln?
Die Bezeichnungen kannst Du mit objFolder.GetDetailsOf(Name, i) ermitteln, wobei i der Index der gewünschten Information ist.

2. Wo finde ich eine Liste der Exif-Daten Indizes?
Eine vollständige Liste ist oft in der Dokumentation der verwendeten Software oder auf Websites zu finden, die sich mit Exif-Daten befassen, wie z.B. whatis.org.

3. Kann ich Exif-Daten für mehrere Bilder gleichzeitig auslesen?
Ja, Du kannst das Skript so anpassen, dass es durch alle Dateien in einem Verzeichnis iteriert, um die Exif-Daten aus mehreren Bildern auszulesen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige