OLE 개체 및 ActiveX 컨트롤
OLE 객체 및 ActiveX 컨트롤
Aspose.Words FOSS for .NET는 OleFormat 진입점 및 Aspose.Words.Drawing과 Aspose.Words.Drawing.Ole에 있는 관련 클래스를 통해 임베디드 OLE 객체와 Forms 2.0 ActiveX 컨트롤에 대한 읽기 접근을 제공합니다.
임베디드 OLE 객체 데이터에 접근하기
OleFormat은 임베디드 Shape에 의해 노출되며 임베디드 객체의 원시 데이터와 메타데이터에 접근을 제공합니다. SuggestedFileName와 SuggestedExtension은 임베디드 객체가 저장될 형태를 설명하고, ProgId는 이를 만든 OLE 서버 애플리케이션을 식별하며, IsLink는 연결된 객체(SourceFullName/SourceItem가 외부 소스를 가리킴)를 완전하게 임베디드된 객체와 구분합니다. GetOleEntry(oleEntryName)은 OLE 복합 파일 구조에서 특정 이름의 스트림을 읽고, GetRawData()는 전체 원시 객체 데이터를 반환하며, Save(fileName)/Save(stream)은 임베디드 객체의 원본 데이터를 디스크나 스트림으로 기록합니다 — 이는 원본 임베디드 파일(예: 임베디드 스프레드시트 또는 프레젠테이션)을 해당 애플리케이션을 열지 않고 추출하는 데 유용합니다. OlePackage는 OleFormat.OlePackage을 통해 도달할 수 있으며, OLE Package로 임베디드된 객체에 대해 FileName와 DisplayName를 노출합니다.
Forms 2.0 ActiveX 컨트롤 작업하기
임베디드 객체가 Microsoft Forms 2.0 ActiveX 컨트롤(체크박스, 텍스트 박스, 콤보 박스 등 문서가 아닌 인터랙티브 컨트롤)인 경우, OleFormat.OleControl은 OleControl을 반환합니다. 해당 객체의 IsForms2OleControl 속성을 확인하고, true이면 Forms2OleControl(모든 Forms 2.0 컨트롤의 추상 기본 클래스)로 캐스팅하여 컨트롤 고유 속성에 접근합니다: Caption, Value, Enabled, Type(Forms2OleControlType 값 — CheckBox, Textbox, ComboBox, OptionButton, ListBox, CommandButton 등), 그리고 시각 속성 ForeColor, BackColor, Width, Height. 프레임과 같은 컨테이너 컨트롤은 ChildNodes을 통해 중첩된 컨트롤을 노출하며, 이는 Forms2OleControlCollection입니다.
팁 및 모범 사례
- 임베디드 객체 데이터가 로컬에 존재한다고 가정하기 전에
OleFormat.IsLink를 확인하십시오 — 연결된 객체는SourceFullName를 통해 외부 파일을 참조하며 내용을 임베드하지 않습니다. - 대량으로 임베디드 객체를 추출할 때 의미 있는 출력 파일명을 재구성하려면
SuggestedExtension와Save()를 함께 사용하십시오. - 항상
OleControl.IsForms2OleControl를 확인한 후Forms2OleControl로 캐스팅하십시오 — 모든OleControl가 Forms 2.0 컨트롤은 아닙니다. Forms2OleControlCollection.Count와GetEnumerator()를 통한 열거를 사용하면 프레임이나 다중 페이지 컨테이너 컨트롤 내부의 중첩된 컨트롤을 탐색할 수 있습니다.
일반적인 문제
| 문제 | 원인 | 해결 방법 |
|---|---|---|
GetRawData()이(가) 예상치 못한/빈 데이터를 반환합니다 | 객체는 (IsLink == true) 링크이며, 포함되지 않았습니다 | 먼저 IsLink을 확인하고; 링크된 객체에 대해서는 SourceFullName을 해결하십시오 |
InvalidCastException이(가) OleControl을 Forms2OleControl(으)로 캐스팅합니다 | 컨트롤이 Forms 2.0 컨트롤이 아닙니다 | 캐스팅하기 전에 IsForms2OleControl를 확인하십시오 |
GetOleEntry()는 명명된 스트림에 대해 null을 반환합니다 | 스트림 이름이 이 객체의 복합 파일 구조에 존재하지 않습니다 | 고정된 이름을 가정하는 대신 실제 엔트리 이름을 열거하십시오 |
| 프레임 내부의 중첩된 컨트롤을 찾을 수 없습니다 | 상위 수준 OleControl만 확인했으며, ChildNodes는 확인하지 않았습니다 | 컨테이너 컨트롤을 위해 Forms2OleControl.ChildNodes에 재귀 호출하십시오 |
FAQ
Word 문서에서 임베디드 Excel 또는 PowerPoint 객체를 어떻게 추출합니까?
쉐이프의 OleFormat에 접근한 다음 Save(fileName) 또는 GetRawData()를 호출하여 임베디드 객체의 원시 바이트를 가져오십시오; SuggestedExtension를 사용하여 출력 파일명을 적절히 지정하십시오.
임베드된 OLE 객체와 Forms 2.0 컨트롤의 차이점은 무엇인가요?
임베드된 OLE 객체(OleFormat를 통해 직접 접근) 는 일반적으로 다른 문서(스프레드시트, 프레젠테이션)이며; Forms 2.0 컨트롤(OleFormat.OleControl → Forms2OleControl) 은 체크박스나 텍스트 박스와 같은 인터랙티브 UI 요소입니다.
OLE 객체가 임베드된 것이 아니라 링크된 것인지 어떻게 확인합니까?
OleFormat.IsLink를 확인하십시오 — true일 때, SourceFullName와 SourceItem가 객체가 자체 데이터를 보유하는 것이 아니라 외부 소스를 설명합니다.
체크박스 컨트롤의 캡션이나 값을 읽을 수 있나요?
예 — IsForms2OleControl를 확인한 후 OleControl를 Forms2OleControl으로 캐스트하고 Caption와 Value를 읽으세요.
API Reference 요약
| 클래스 / 메서드 | 설명 |
|---|---|
OleFormat | 임베드된 OLE 객체의 데이터 및 메타데이터에 대한 진입점 |
OleFormat.GetRawData() | 임베드된 객체의 원시 바이트를 검색합니다 |
OleFormat.Save() | 임베드된 객체의 원시 데이터를 파일이나 스트림에 저장합니다 |
OlePackage | OLE 패키지 객체의 파일 이름/표시 이름 |
OleControl | 삽입된 ActiveX 컨트롤의 기본 표현 |
Forms2OleControl | Microsoft Forms 2.0 컨트롤(체크박스, 텍스트박스, 콤보 박스 등) |
Forms2OleControlCollection | 자식 Forms2OleControl 노드 컬렉션(예: 프레임 내부) |
Forms2OleControlType | Forms 2.0 컨트롤 종류 Enum |