Извлечение данных объекта OLE в Microsoft Office без приложения OLE - PullRequest
2 голосов
/ 21 декабря 2011

Можно ли извлечь содержимое встроенного OLE-объекта в Microsoft Office с помощью VBA / VSTO? Я говорю о ситуации, когда приложение, с которым был создан объект OLE, недоступно. В этом случае какое-то приложение-конвертер может использовать необработанные данные.

Например, в Excel объект доступен через ActiveSheet.Shapes(x).OLEFormat, но я не нашел способа извлечь необработанные данные объекта.

Один из способов - открыть собственный файл (Office Open XML / Compound File) и извлечь из него данные. Но, может быть, есть более простой подход?

Ответы [ 2 ]

3 голосов
/ 22 декабря 2011

Скопируйте OLEObject в буфер обмена, затем получите его из буфера обмена, например, как то так во ВСТО:

Dim ole as OLEObject
...
ole.Copy
...
Clipboard.GetData("Embedded Object")

В VBA я только что открыл папку через Shell, а затем вставил с помощью SendKeys.

ole.copy
Shell "explorer.exe " & sFolderName, vbNormalFocus
Application.Wait Now() + TimeSerial(0, 0, 3)
Application.Sendkeys "^v"
1 голос
/ 23 марта 2016

Скопируйте OLEObject в буфер обмена, затем поместите его через "Shell.Application" (глагол Paste) из буфера обмена в папку

 For Each Sh In Sheet1.OLEObjects
  If InStr(1, Sh.Name, "Object", 1) Then
   Sh.Copy 
   ' this code paste Embedded Object to folder
   CreateObject("Shell.Application").Namespace("c:\temp\!").Self.InvokeVerb "Paste"
  End If
 Next Sh
...