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

如何从excel工作表中使用VBA的形状图像获取像纬度,经度等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 

幸运的是,澳大利亚中北部stream域pipe理局的Andrew Phillips 编写了一段美丽的代码 ,就是这样做的。

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

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

Private Declare Function VirtualAlloc Lib“kernel32”(ByVal Address As Long,ByVal Size As Long,ByVal AllocationType As Long,ByVal Protect As Long)As Long

这个使用PntSafe

私有声明PtrSafe函数VirtualAlloc Lib“kernel32”(ByVal地址只要,ByVal大小长,ByVal分配types只要ByVal保护不变)As Long

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

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

这两种方法都不是微不足道的,在这两种情况下,使用.NET会更容易一些。