2011-12-21 2 views
2

VBA/VSTO를 사용하여 Microsoft Office에 포함 된 OLE 개체의 내용을 추출 할 수 있습니까? OLE 개체를 만든 응용 프로그램을 사용할 수없는 상황에 대해 이야기하고 있습니다. 이 경우 어떤 종류의 변환기 응용 프로그램은 원시 데이터를 사용할 수 있습니다.OLE 응용 프로그램없이 Microsoft Office에서 OLE 개체 데이터 추출

예를 들어, Excel에서 객체는 ActiveSheet.Shapes(x).OLEFormat을 통해 액세스 할 수 있지만 객체의 원시 데이터를 검색하는 방법을 찾지 못했습니다.

한 가지 방법은 기본 파일 (Office Open XML/Compound File)을 열고 거기에서 데이터를 추출하는 것입니다. 그러나 더 간단한 접근법이있을 수 있습니까?

+1

당신은 클립 보드에 복사 할 수 있습니다 폴더로 이상 그것을 얻을 다음 붙여 VSTO를 사용 클립 보드에서. 나는 그것을 테스트하지는 않았지만 시도할만한 가치가있다. 그것이 어떻게 작동하는지 알려주십시오. – Jon49

+0

좋은 아이디어. 도형을 복사 한 다음'Clipboard.GetData ("Embedded Object")에 액세스하면 트릭을 수행합니다. 감사! –

+0

멋진 답변입니다. 답변을 게시하여 크레딧을받을 수 있습니다. 나는 지금 당장 같은 일을하고 있지만 VBA에서해야한다. – Jon49

답변

3

OLEObject을 클립 보드에 복사 한 다음 클립 보드에서 가져옵니다 (예 : VSTO에서이 같은 일이 :

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

은 VBA에서 그냥 다음 SendKeys를 사용하여 붙여 넣기 Shell을 통해 폴더를 열고있다.

ole.copy 
Shell "explorer.exe " & sFolderName, vbNormalFocus 
Application.Wait Now() + TimeSerial(0, 0, 3) 
Application.Sendkeys "^v" 
1

클립 보드로 복사 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