使用VBA获取扩展文件属性

时间:2011-04-13 15:39:15

标签: vba file-attributes fso

尝试使用Excel VBA捕获磁盘上文件的所有文件属性,包括扩展属性。能够让它循环遍历文件并捕获基本属性(来自文件系统):

  • 文件路径
  • 文件名
  • 文件大小
  • 创建日期
  • 上次访问日期
  • 上次修改日期
  • 文件类型

还要捕获来自文件本身的扩展属性:

  • 作者
  • 关键字
  • 评论
  • 最后作者
  • 分类
  • 主题

右键单击文件时可见的其他属性。

目标是创建文件服务器上所有文件的详细列表。

5 个答案:

答案 0 :(得分:23)

你说循环..所以如果你想为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是attribure列索引,例如作者为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 :(得分:8)

您可以使用.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 :(得分:3)

android {
    compileSdkVersion 23
    buildToolsVersion ANDROID_BUILD_TOOLS_VERSION
    useLibrary 'org.apache.http.legacy'

    defaultConfig {
       minSdkVersion ANDROID_MIN_SDK_VERSION
        targetSdkVersion ANDROID_TARGET_SDK_VERSION
    }

    buildTypes {
        release {
            minifyEnabled false
        }
    }

    dexOptions {
        javaMaxHeapSize "4g"
    }
}

答案 3 :(得分:0)

我终于可以使用后期绑定并刷新此链接https://docs.microsoft.com/en-us/windows/win32/shell/folder-getdetailsof来使其正常工作。属性代码在我的计算机上是不同的,就像上面提到的某些人一样,大多数返回空值,即使它们不是。我使用了for循环遍历所有这些元素,发现标题和主题仍然可以访问,对于我的目的而言,这已经足够了。

not (Player1_Tag == "X" or Player1_Tag == "0")

答案 4 :(得分:0)

幸运的发现

如果objFolderItem通话时没事

objFolder.GetDetailsOf(objFolderItem, i)

返回的字符串是属性的名称,而不是其(未定义)值 例如当i=3返回“修改日期”

对I的所有288个值执行此操作可以清楚地说明为什么大多数原因导致大多数文件类型返回空白 例如i=175是“水平分辨率”