2017-04-12 179 views
4

如何從使用VBA的Excel工作表中的形狀圖片中獲取EXIF信息(如緯度,經度等)?是否可以在不從工作表中提取或複製圖片或從壓縮的Excel工作簿中獲取圖片?如何從使用VBA的Excel工作表中的圖片獲取EXIF信息

我可以使用下面的代碼遍歷壓縮文件夾的內容。

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 

回答

3

幸運的是,澳大利亞中北部流域管理局的Andrew Phillips發現了一件美麗的作品of coding

所以我沒有看過重新上榜這裏

當前的代碼可以從接入到Excel中導入它是作爲一個類模塊,在我來說,我需要從32更改功能64位像這樣:

私人聲明函數的VirtualAlloc庫 「KERNEL32」(BYVAL地址等長,BYVAL尺寸長,BYVAL AllocationType長,BYVAL保護長),只要

本使用PntSafe

私人聲明PTRSAFE功能的VirtualAlloc庫 「KERNEL32」(BYVAL地址等長,BYVAL尺寸長,BYVAL AllocationType長,BYVAL保護長),只要

+0

感謝您的推薦和對64位Excel實施的洞察。 exif信息是解決方案的重要組成部分,我一定會追求這一點。至於我的問題的其他部分。在沒有首先將文件導出到臨時工作位置的情況下,是否可以讀取,編輯或保存壓縮文件的內容?我假設這是不可能的,因爲該文件是壓縮的,它似乎甚至不能像Windows那樣工作。即使是一個簡單的文本文件也會在臨時位置打開,並且無法將其直接保存到您打開的壓縮位置。 – RRR

2

Excel中的渲染圖片通常嵌入在增強型圖元文件(EMF)中。您需要將元文件作爲EMF複製到剪貼板,然後枚舉EMF的記錄並提取JPG,然後從JPG信息中解析EXIF數據。

或者,如果Excel文件已保存且處於XLSX/XLSM格式,則可以從壓縮的XLSX/XLSM容器中提取JPG,然後解析該圖像以獲取EXIF數據。

這兩種方法都不是微不足道的,在這兩種情況下,使用.NET都會更容易。

+0

感謝您的快速反應。我致力於在這個版本上使用Excel VBA,因爲它補充了很多現有的VBA代碼。因此,如果我只處理Excel中的xlsx/m工作簿,它們以OpenXML格式存儲,我是否能夠直接從存儲的文件中讀取EXIF信息,當然這些信息是帶有EXIF的JPEG文件?我想開始我需要能夠讀取xlsm工作簿中的文件內容,並且我已經找到了一些這樣的例子,但這些例子都是先導出文件,但我想直接讀取它們。是否可以直接讀取文件? – RRR

+0

看起來像@ brettdj的答案將提取EXIF數據,但您仍然需要提取文件並讀取XML以查找圖像。 .NET使解壓縮變得相對容易,但對於純粹的VBA解決方案,您需要使用類似於Ron de Bruin [示例]的代碼將文件解壓到臨時位置(https://www.rondebruin.nl/win/s7 /win002.htm)。即使提取了文件,也需要能夠解釋描述文件關係,佈局和內容的* multiple * xml文件,以便識別哪個圖像是哪個。 – ThunderFrame

+0

您應該嘗試將'xlsx'文件擴展名更改爲'zip',並瀏覽該文件的內容,以確認圖像實際上具有您需要的EXIF數據*。*之前*您花費太多時間追求此目的。 – ThunderFrame

相關問題