Excel VBA 打开文件夹并获取其中每个文件的 GPS 信息 (Exif) (2)

vbaexcel

1个回答

写回答

13611751501

2025-06-23 02:10

+ 关注

excel
excel

excel VBA中,我们可以通过编写代码来打开文件夹并获取其中每个文件的GPS信息(Exif)。这个功能非常有用,特别是当我们需要处理大量照片或其他包含GPS信息的文件时。下面的文章将向您展示如何使用excel VBA来实现这个功能,并提供一个案例代码供您参考。

首先,我们需要创建一个新的excel工作簿,并在VBA编辑器中打开它。接下来,我们将编写以下代码来实现我们的目标:

VBA

Sub GetGPSInfo()

Dim folderPath As String

Dim fileName As String

Dim fileInfo As String

'选择文件夹

With Application.FileDialog(msoFileDialogFolderPicker)

.Title = "请选择文件夹"

If .Show = -1 Then

folderPath = .SelectedItems(1)

Else

Exit Sub

End If

End With

'打开文件夹并获取每个文件的GPS信息

fileName = Dir(folderPath & "\*.*")

Do While fileName <> ""

'检查文件类型是否为图片

If InStr(1, LCase(fileName), ".jpg") > 0 Or InStr(1, LCase(fileName), ".jpeg") > 0 Or InStr(1, LCase(fileName), ".png") > 0 Then

fileInfo = GetExifInfo(folderPath & "\" & fileName)

'将GPS信息写入excel表格

ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = fileName

ThisWorkbook.Sheets(1).Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Value = fileInfo

End If

fileName = Dir

Loop

MsgBox "已完成获取GPS信息!"

End Sub

Function GetExifInfo(filePath As String) As String

Dim obJShell As Object

Dim objFolder As Object

Dim objFolderItem As Object

Set obJShell = CreateObject("Shell.Application")

Set objFolder = obJShell.Namespace(filePath)

Set objFolderItem = objFolder.ParseName(Split(filePath, "\")(UBound(Split(filePath, "\")))))

'获取GPS信息

GetExifInfo = objFolder.GetDetAIlsOf(objFolderItem, 27)

Set objFolderItem = Nothing

Set objFolder = Nothing

Set obJShell = Nothing

End Function

在上面的代码中,我们首先使用FileDialog对象让用户选择文件夹。然后,我们使用Dir函数遍历文件夹中的所有文件。对于每个文件,我们检查其文件类型是否为图片(以.jpg.jpeg.png为扩展名)。如果是图片,我们调用GetExifInfo函数来获取其GPS信息,并将文件名和GPS信息写入excel表格中。

GetExifInfo函数中,我们使用Shell.Application对象来打开文件夹,并使用ParseName方法获取指定文件的FolderItem对象。然后,我们使用GetDetAIlsOf方法来获取该文件的Exif信息中的GPS信息。

现在,我们可以运行GetGPSInfo宏来打开文件夹并获取每个文件的GPS信息。GPS信息将被写入excel表格的第一个工作表中。

案例代码

下面是一个案例代码,展示了如何使用上述代码来获取文件夹中每个文件的GPS信息。

VBA

Sub GetGPSInfo()

'在此处添加上述代码

End Sub

Function GetExifInfo(filePath As String) As String

'在此处添加上述代码

End Function

Sub MAIn()

GetGPSInfo

End Sub

在这个案例代码中,我们创建了一个名为MAIn的子过程,其中调用了GetGPSInfo宏。您可以直接运行MAIn来获取文件夹中每个文件的GPS信息。

通过使用excel VBA,我们可以很方便地打开文件夹并获取其中每个文件的GPS信息。这对于处理大量照片或包含GPS信息的文件非常有用。希望本文提供的案例代码能够帮助您实现这个功能。如果您有任何疑问,请随时在下方评论区提问。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号