如何使用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
答案 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都会更容易。