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):
Voudrait également capturer les propriétés étendues qui proviennent du fichier lui-même:
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.
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
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 .
'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