如何使用VBA从excel工作表中的图片中获取EXIF信息

时间:2017-04-12 06:40:17

标签: excel vba

如何使用VBA从excel工作表中的形状图片中获取像Latitude,Longitude等EXIF信息?是否可以在不从工作表或从压缩的Excel工作簿中提取或复制图片的情况下获取它?

我可以使用以下代码遍历压缩文件夹内容。

Public Sub ReadZip()
    Dim vZipFileName As Variant
    vZipFileName = "C:\Users\erogrou\Desktop\Test.zip"

    Dim objShell, objFolder
    Set objShell = CreateObject("shell.application")
    Set objFolder = objShell.Namespace(vZipFileName)

    Dim vFilename As Variant

    If (Not objFolder Is Nothing) Then
        Debug.Print objFolder.self.Path

        For Each vFilename In objFolder.items
            Debug.Print vFilename
        Next

    End If

    Set objFolder = Nothing
    Set objShell = Nothing

End Sub

2 个答案:

答案 0 :(得分:3)

幸运的是,来自澳大利亚北部中央流域管理局的安德鲁·菲利普斯(Andrew Phillips)有一个美丽的作品of coding就是这样做的。

它是作为一个类模块提供的,所以我没有在这里重新列出这个

当前代码可以从Access导入到Excel,在我的情况下,我需要将函数从32位更改为64位,如下所示:

  

私有声明功能VirtualAlloc Lib" kernel32" (ByVal地址为长,ByVal大小为长,ByVal AllocationType为长,ByVal保护为长)

使用PntSafe

  

私有声明PtrSafe功能VirtualAlloc Lib" kernel32" (ByVal地址为长,ByVal大小为长,ByVal AllocationType为长,ByVal保护为长)

答案 1 :(得分:2)

Excel中渲染的图片通常嵌入在增强型图元文件(EMF)中。您需要将图元文件作为EMF复制到剪贴板,然后枚举EMF的记录并提取JPG,然后从JPG信息中解析EXIF数据。

或者,如果保存Excel文件并且格式为XLSX / XLSM,则可以从压缩的XLSX / XLSM容器中提取JPG,然后解析该图像以获取EXIF数据。

这两种方法都无法实现,在这两种情况下,使用.NET都会更容易。