Вопрос:
Как получить информацию EXIF, такую как Latitude, Longitude и т.д., из рисунка формы на листе Excel с помощью VBA? И можно ли его получить без извлечения или копирования изображения из рабочего листа или из застрявшей книги Excel?
Я могу выполнить итерацию по содержимому zipped folder с помощью следующего кода.
Public Sub ReadZip() Dim vZipFileName As Variant vZipFileName = «C:UserserogrouDesktopTest.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 Лучший ответ:
К счастью для вас есть красивая часть кодирования Эндрю Филлипса из North North Catchment Management Authority из Австралии, которая делает именно это.
Он предоставляется как модуль класса, поэтому я не искал переименования этого здесь.
Текущий код можно импортировать из Access в Excel, в моем случае мне нужно было изменить функции от 32 до 64 бит следующим образом:
Частная декларация Функция 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 Address As Long, ByVal Size As Long, ByVal AllocationType As Long, ByVal Protect As Long) As Long
Ответ №1
Представленные изображения в Excel обычно встроены в расширенный метафайл (EMF). Вам нужно скопировать метафайл в буфер обмена как EMF, затем перечислить записи EMF и извлечь JPG, а затем проанализировать данные EXIF из информации JPG.
В качестве альтернативы, если файл Excel сохраняется и находится в формате XLSX/XLSM, вы можете извлечь JPG из сжатого контейнера XLSX/XLSM и затем проанализировать это изображение для данных EXIF.
Ни один подход тривиально реализовать, и в обоих случаях было бы проще с .NET.