web-dev-qa-db-fra.com

Utilisation de VBA pour obtenir des attributs de fichier étendus

Essayer d'utiliser Excel VBA pour capturer tous les attributs de fichier de fichiers sur disque, y compris les attributs étendus. A pu l'obtenir pour parcourir les fichiers et capturer les attributs de base (qui proviennent du système de fichiers):

  • Chemin du fichier
  • Nom de fichier
  • Taille du fichier
  • Date créée
  • Date du dernier accès
  • Date de dernière modification
  • Type de fichier

Voudrait également capturer les propriétés étendues qui proviennent du fichier lui-même:

  • Auteur
  • Mots clés
  • Commentaires
  • Dernier auteur
  • Catégorie
  • Subject

Et d'autres propriétés qui sont visibles lors d'un clic droit sur le fichier.

L'objectif est de créer une liste détaillée de tous les fichiers sur un serveur de fichiers.

21
Jim McKeeth

Vous dites boucle .. donc si vous voulez faire ça pour un dir au lieu du document courant;

Dim sFile As Variant
Dim oShell: Set oShell = CreateObject("Shell.Application")
Dim oDir:   Set oDir = oShell.Namespace("c:\foo")

For Each sFile In oDir.Items
   Debug.Print oDir.GetDetailsOf(sFile, XXX) 
Next

Où XXX est un index de colonne d'attribut, 9 pour Author par exemple. Pour répertorier les index disponibles pour votre référence, vous pouvez remplacer la boucle for par;

for i = 0 To 40
   debug.? i, oDir.GetDetailsOf(oDir.Items, i)
Next

Rapidement pour un seul fichier/attribut:

Const PROP_COMPUTER As Long = 56

With CreateObject("Shell.Application").Namespace("C:\HOSTDIRECTORY")
    MsgBox .GetDetailsOf(.Items.Item("FILE.NAME"), PROP_COMPUTER)
End With
24
Alex K.

Vous pouvez obtenir cela avec .BuiltInDocmementProperties.

Par exemple:

Public Sub PrintDocumentProperties()
    Dim oApp As New Excel.Application
    Dim oWB As Workbook
    Set oWB = ActiveWorkbook

    Dim title As String
    title = oWB.BuiltinDocumentProperties("Title")

    Dim lastauthor As String
    lastauthor = oWB.BuiltinDocumentProperties("Last Author")

    Debug.Print title
    Debug.Print lastauthor
End Sub

Voir cette page pour tous les champs auxquels vous pouvez accéder avec ceci: http://msdn.Microsoft.com/en-us/library/bb220896.aspx

Si vous essayez de le faire en dehors du client (c'est-à-dire avec le code Excel fermé et en cours d'exécution, par exemple, d'un programme .NET), vous devez utiliser DSOFile.dll .

8
Todd Main
'vb.net
'Extended file stributes
'visual basic .net sample 

Dim sFile As Object
        Dim oShell = CreateObject("Shell.Application")
        Dim oDir = oShell.Namespace("c:\temp")

        For i = 0 To 34
            TextBox1.Text = TextBox1.Text & oDir.GetDetailsOf(oDir, i) & vbCrLf
            For Each sFile In oDir.Items
                TextBox1.Text = TextBox1.Text & oDir.GetDetailsOf(sFile, i) & vbCrLf
            Next
            TextBox1.Text = TextBox1.Text & vbCrLf
        Next
3
Jorge Gudiño