Использование VBA для получения расширенных атрибутов файла

Вопрос:Попытка использовать Excel VBA для захвата всех атрибутов файла из файлов на диске, включая расширенные атрибуты. Он смог заставить его зациклиться на файлах и захватить основные атрибуты (которые поступают из файловой системы): Путь к файлу Имя файла Размер файла Дата создания Дата последнего доступа Дата последнего изменения. Тип файла Также хотелось бы захватить расширенные свойства,

Вопрос:

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

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

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

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

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

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

Лучший ответ:

Вы говорите, что цикл… так что если вы хотите сделать это для 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 Ответ №1

Вы можете получить это с помощью .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.

Ответ №2’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

Я наконец смог заставить это работать, используя позднюю привязку и ссылку на эту ссылку: https://docs.microsoft.com/en-us/windows/win32/shell/folder-getdetailsof. Коды атрибутов были разными на моем компьютере и, как кто-то из упомянутых выше, большинство возвращали пустые значения, даже если это не так. Я использовал цикл for для их циклического просмотра и обнаружил, что к заголовку и теме все еще можно получить доступ, чего более чем достаточно для моих целей.

Private Sub MySubNamek() Dim objShell As Object ‘Shell Dim objFolder As Object ‘Folder Set objShell = CreateObject(«Shell.Application») Set objFolder = objShell.NameSpace(«E:MyFolder») If (Not objFolder Is Nothing) Then Dim objFolderItem As Object ‘FolderItem Set objFolderItem = objFolder.ParseName(«Myfilename.txt») For i = 0 To 288 szItem = objFolder.GetDetailsOf(objFolderItem, i) Debug.Print i & » — » & szItem Next Set objFolderItem = Nothing End If Set objFolder = Nothing Set objShell = Nothing End Sub

Оцените статью
Добавить комментарий