Использование VBA для получения расширенных атрибутов файла - PullRequest
21 голосов
/ 13 апреля 2011

Попытка использовать Excel VBA для захвата всех атрибутов файлов из файлов на диске , включая расширенные атрибуты.Был в состоянии заставить его перебирать файлы и захватывать основные атрибуты (которые приходят из файловой системы):

  • Путь к файлу
  • Имя файла
  • ФайлРазмер
  • Дата создания
  • Дата последнего доступа
  • Дата последнего изменения
  • Тип файла

Также хотел бы захватитьрасширенные свойства, которые исходят из самого файла:

  • Автор
  • Ключевые слова
  • Комментарии
  • Последний автор
  • Категория
  • Тема

И другие свойства, которые видны при щелчке правой кнопкой мыши по файлу.

Цель - создать подробный список всех файлов на файловом сервере.

Ответы [ 3 ]

24 голосов
/ 13 апреля 2011

Вы говорите цикл .. поэтому, если вы хотите сделать это для dir вместо текущего документа,

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

, где XXX - индекс столбца атрибута, например, 9 для автора.Чтобы перечислить доступные индексы для справки, вы можете заменить цикл for на

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

Быстро для отдельного файла / атрибута:

Const PROP_COMPUTER As Long = 56

With CreateObject("Shell.Application").Namespace("C:\HOSTDIRECTORY")
    MsgBox .GetDetailsOf(.Items.Item("FILE.NAME"), PROP_COMPUTER)
End With
8 голосов
/ 13 апреля 2011

Вы можете получить это с помощью .BuiltInDocmementProperties.

Например:

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

См. Эту страницу для всех полей, к которым вы можете получить доступ с этим: http://msdn.microsoft.com/en-us/library/bb220896.aspx

Если вы пытаетесь сделать это вне клиента (то есть, когда Excel закрыт и работает код, скажем, из .NET-программы), вам нужно использовать DSOFile.dll .

3 голосов
/ 02 июня 2016
'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
...