如果你需要获取文件信息,比如文件名、文件目录、文件大小、文件创建日期、文件修改日期、照片分辨率等等,常用的方法是使用 GetDetailsOf 方法。
GetDetailsOf 方法
语法
Folder.GetDetailsOf(vItem, iColumn)
参数
名称 | 必需/可选 | 数据类型 | 说明 |
---|---|---|---|
vItem | 必需 | Variant | 要为其检索信息的项。这必须是 FolderItem 对象。 |
iColumn | 必需 | 整数 | 指定要检索的信息的 Integer 值。项的可用信息取决于显示该项的文件夹。此值对应于 Shell 视图中显示的从零开始的列号。 |
下表列出了使用 GetDetailsOf 方法的常用值:
项目 | 值 |
---|---|
名称 | 0 |
大小 | 1 |
项目类型 | 2 |
修改日期 | 3 |
创建日期 | 4 |
访问日期 | 5 |
属性 | 6 |
脱机状态 | 7 |
可用性 | 8 |
假设的类型 | 9 |
所有者 | 10 |
种类 | 11 |
拍摄日期 | 12 |
参与创作的艺术家 | 13 |
唱片集 | 14 |
年 | 15 |
流派 | 16 |
指挥者 | 17 |
标记 | 18 |
分级 | 19 |
作者 | 20 |
标题 | 21 |
主题 | 22 |
类别 | 23 |
备注 | 24 |
版权 | 25 |
# | 26 |
时长 | 27 |
比特率 | 28 |
保护 | 29 |
照相机型号 | 30 |
分辨率 | 31 |
照相机制造商 | 32 |
公司 | 33 |
文件说明 | 34 |
主机关键字 | 35 |
示例:列出 GetDetailsOf 的参数取值
Sub GetDetailsOfDemo()
' 创建一个新的工作表
Sheets.Add
' 定义两个变量用于 Shell 应用程序和文件夹对象
Dim objShell, objFolder
' 创建 Shell.Application 对象以访问系统文件夹属性
Set objShell = CreateObject("Shell.Application")
' 设置 objFolder 为指定路径 "C:\" 的文件夹对象
' 该对象用于访问文件夹及其详细信息
Set objFolder = objShell.Namespace("C:\")
' 使用循环来遍历文件夹属性,范围从 0 到 100(如果你想获取更多,更改100为其它数字)
For i = 0 To 100
' 获取该属性的名称(通过 objFolder.GetDetailsOf 方法)
' 并将其写入到 Excel 的第一列(第 i + 1 行)
Cells(i + 1, 1) = objFolder.GetDetailsOf(objFolder.Items, i)
' 将属性的索引值(i)写入到 Excel 的第二列(第 i + 1 行)
Cells(i + 1, 2) = i
Next
End Sub
示例:获取指定文件夹下的照片信息
本示例能从选择的文件夹中获取文件后缀为 .png,.jpg 和 .jpeg 的照片详细信息,并将这些信息写入到 Excel 工作表中。程序运行效果如下:
Sub GetPhotoDetails()
' 定义一个文件对话框对象,用于选择文件夹
Dim fd As FileDialog
' 创建文件夹选择对话框(文件对话框的类型为文件夹选择)
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
' 如果用户选择了文件夹(对话框返回-1表示选择了一个文件夹)
Dim GetDirectory As Variant
If fd.Show = -1 Then
' 获取所选文件夹的路径,并赋值给 GetDirectory
GetDirectory = fd.SelectedItems(1)
End If
' 定义变量来处理文件夹中的项目和行数等
Dim Item As Long, RowCount As Long, i As Long
' 用于 Shell 应用程序,获取文件夹的详细信息
Dim FileName As Object, objShell As Object, ObiFolder As Object
' 创建 Shell 对象,以便能访问文件系统的详细信息
Set objShell = CreateObject("shell.Application")
' 使用 Shell 对象获取目标文件夹的文件夹对象
Set ObiFolder = objShell.Namespace(GetDirectory)
' 设置常见图片文件扩展名
Dim imageExtensions As String
imageExtensions = "png,jpg,jpeg,gif,bmp,tiff"
' 设置错误处理,当有错误发生时继续执行代码
On Error Resume Next
' 禁用屏幕更新,以提高代码执行效率
Application.ScreenUpdating = False
' 初始化 RowCount,表示行号
RowCount = 1
' 遍历文件夹中的每一个文件
For Each FileName In ObiFolder.Items
' 只列出 PNG, JPEG 和 JPG 文件,如果不需要过滤,则注释掉下一行(41)和对应的 End If (63)行。
If FileName.Type = "PNG 文件" Or FileName.Type = "JPEG 文件" Or FileName.Type = "JPG 文件" Then
' 初始化项(列)编号为 0
Item = 0
' 行号增加,准备填写下一行
RowCount = RowCount + 1
' 循环获取文件属性的索引,从 0 到 33(假设是文件属性索引)
For i = 0 To 33
' 如果属性的索引是特定值(0-5,12,30-32),则获取对应的文件属性
If i < 6 Or i = 12 Or (i > 29 And i < 33) Then
' 增加列计数器
Item = Item + 1
' 获取当前文件属性并写入到 Excel 工作表中相应的单元格
Cells(RowCount, Item) = ObiFolder.GetDetailsOf(FileName, i)
' 如果是第一行(RowCount = 2),则在第一行中写入列名
If RowCount = 2 Then
' 获取该列的属性名称(用于表头)
Cells(1, Item) = ObiFolder.GetDetailsOf(ObiFolder.Items, i)
End If
End If
Next i
End If
Next FileName
' 释放文件对话框对象
Set fd = Nothing
' 重新启用屏幕更新
Application.ScreenUpdating = True
End Sub