Usar VBA para obtener atributos extendidos de archivo

Intenta utilizar Excel VBA para capturar todos los atributos de archivo de los archivos en el disco , incluidos los atributos extendidos. Pude hacer que recorriera los archivos y capturara los atributos básicos (que provienen del sistema de archivos):

  • Ruta de archivo
  • Nombre del archivo
  • Tamaño del archivo
  • fecha de creacion
  • Fecha de último acceso
  • Fecha de última modificación
  • Tipo de archivo

También me gustaría capturar las propiedades extendidas que provienen del archivo en sí:

  • Autor
  • Palabras clave
  • Comentarios
  • Último autor
  • Categoría
  • Tema

Y otras propiedades que son visibles al hacer clic derecho en el archivo.

El objective es crear una lista detallada de todos los archivos en un servidor de archivos.

Usted dice bucle … así que si quiere hacer esto para un directorio en lugar del documento actual;

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 

Donde XXX es un índice de columnas attribure, 9 para Autor, por ejemplo. Para enumerar los índices disponibles para su referencia, puede reemplazar el ciclo for por;

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

Rápidamente para un solo archivo / atributo:

 Const PROP_COMPUTER As Long = 56 With CreateObject("Shell.Application").Namespace("C:\HOSTDIRECTORY") MsgBox .GetDetailsOf(.Items.Item("FILE.NAME"), PROP_COMPUTER) End With 

Puede obtener esto con .BuiltInDocmementProperties .

Por ejemplo:

 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 

Consulte esta página para ver todos los campos a los que puede acceder con esto: http://msdn.microsoft.com/en-us/library/bb220896.aspx

Si intenta hacer esto fuera del cliente (es decir, con Excel cerrado y ejecutando código de, por ejemplo, un progtwig .NET), necesita usar 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