Obiekty OLE i kontrolki ActiveX
Obiekty OLE i kontrolki ActiveX
Aspose.Words FOSS dla .NET zapewnia dostęp tylko do odczytu do osadzonych obiektów OLE i kontrolek Forms 2.0 ActiveX poprzez punkt wejścia OleFormat oraz powiązane klasy w Aspose.Words.Drawing i Aspose.Words.Drawing.Ole.
Uzyskiwanie dostępu do danych osadzonego obiektu OLE
OleFormat jest udostępniane przez osadzony Shape i zapewnia dostęp do surowych danych oraz metadanych osadzonego obiektu. SuggestedFileName i SuggestedExtension opisują, w jakiej formie osadzony obiekt zostałby zapisany, ProgId identyfikuje aplikację serwera OLE, która go utworzyła, a IsLink rozróżnia obiekt powiązany (SourceFullName/SourceItem wskazują na zewnętrzne źródło) od w pełni osadzonego. GetOleEntry(oleEntryName) odczytuje określony nazwany strumień ze struktury pliku złożonego OLE, GetRawData() zwraca pełne surowe dane obiektu, a Save(fileName) / Save(stream) zapisują natywne dane osadzonego obiektu na dysk lub do strumienia — przydatne do wyodrębnienia oryginalnego osadzonego pliku (na przykład osadzonego arkusza kalkulacyjnego lub prezentacji) bez otwierania go w natywnej aplikacji. OlePackage, osiągane poprzez OleFormat.OlePackage, udostępnia FileName i DisplayName dla obiektów osadzonych jako pakiet OLE.
Praca z kontrolkami Forms 2.0 ActiveX
Gdy osadzony obiekt jest kontrolką Microsoft Forms 2.0 ActiveX (pola wyboru, pola tekstowe, listy rozwijane i podobne interaktywne kontrolki, a nie osadzone dokumenty), OleFormat.OleControl zwraca OleControl. Sprawdź jej właściwość IsForms2OleControl, a jeśli true, rzutuj ją na Forms2OleControl (abstrakcyjną klasę bazową dla wszystkich kontrolek Forms 2.0), aby uzyskać właściwości specyficzne dla kontrolki: Caption, Value, Enabled, Type (wartość Forms2OleControlType — CheckBox, Textbox, ComboBox, OptionButton, ListBox, CommandButton i inne), oraz właściwości wizualne ForeColor, BackColor, Width i Height. Kontrolki kontenerowe, takie jak ramki, udostępniają swoje zagnieżdżone kontrolki poprzez ChildNodes, a Forms2OleControlCollection.
Wskazówki i najlepsze praktyki
- Sprawdź
OleFormat.IsLinkprzed założeniem, że dane osadzonego obiektu są dostępne lokalnie — obiekty powiązane odwołują się do zewnętrznego pliku poprzezSourceFullNamezamiast osadzać ich zawartość. - Użyj
SuggestedExtensionrazem zSave(), aby odtworzyć sensowną nazwę pliku wyjściowego przy masowym wyodrębnianiu osadzonych obiektów. - Zawsze sprawdzaj
OleControl.IsForms2OleControlprzed rzutowaniem naForms2OleControl— nie każdyOleControljest kontrolką Forms 2.0. Forms2OleControlCollection.Countoraz enumeracja za pomocąGetEnumerator()umożliwiają przechodzenie po zagnieżdżonych kontrolkach wewnątrz ramki lub kontrolki kontenera wielostronicowego.
Typowe problemy
| Problem | Przyczyna | Rozwiązanie |
|---|---|---|
GetRawData() zwraca nieoczekiwane/puste dane | Obiekt jest odnośnikiem (IsLink == true), a nie osadzonym | Sprawdź najpierw IsLink; rozwiąż SourceFullName dla obiektów powiązanych |
InvalidCastException rzutuje OleControl na Forms2OleControl | Kontrolka nie jest kontrolką Forms 2.0 | Sprawdź IsForms2OleControl przed rzutowaniem |
GetOleEntry() zwraca null dla strumienia o nazwie | Nazwa strumienia nie istnieje w strukturze pliku złożonego tego obiektu | Wymień rzeczywiste nazwy wpisów zamiast zakładać stałą nazwę |
| Nie znaleziono zagnieżdżonych kontrolek wewnątrz ramki | Sprawdzono tylko poziom najwyższy OleControl, a nie ChildNodes | Rekurencyjnie przechodź do Forms2OleControl.ChildNodes w celu uzyskania kontrolek kontenera |
FAQ
Jak wyodrębnić osadzony obiekt Excel lub PowerPoint z dokumentu Word?
Uzyskaj dostęp do OleFormat kształtu, a następnie wywołaj Save(fileName) lub GetRawData(), aby pobrać natywne bajty osadzonego obiektu; użyj SuggestedExtension, aby odpowiednio nazwać plik wyjściowy.
Jaka jest różnica między osadzonym obiektem OLE a kontrolką Forms 2.0?
Osadzony obiekt OLE (dostępny bezpośrednio przez OleFormat) to zazwyczaj inny dokument (arkusz kalkulacyjny, prezentacja); kontrolka Forms 2.0 (OleFormat.OleControl → Forms2OleControl) to interaktywny element interfejsu, taki jak pole wyboru lub pole tekstowe.
Jak sprawdzić, czy obiekt OLE jest połączony, a nie osadzony?
Sprawdź OleFormat.IsLink — gdy true, SourceFullName i SourceItem opisują źródło zewnętrzne zamiast obiektu zawierającego własne dane.
Czy mogę odczytać etykietę lub wartość kontrolki pola wyboru?
Tak — rzutuj OleControl na Forms2OleControl (po potwierdzeniu IsForms2OleControl) i odczytaj Caption oraz Value.
API Reference Podsumowanie
| Klasa / Metoda | Opis |
|---|---|
OleFormat | Punkt wejścia dla danych i metadanych osadzonego obiektu OLE |
OleFormat.GetRawData() | Pobierz surowe bajty osadzonego obiektu |
OleFormat.Save() | Zapisz natywne dane osadzonego obiektu do pliku lub strumienia |
OlePackage | Nazwa pliku/nazwa wyświetlana dla obiektu OLE Package |
OleControl | Podstawowa reprezentacja osadzonej kontrolki ActiveX |
Forms2OleControl | Kontrolka Microsoft Forms 2.0 (pole wyboru, pole tekstowe, pole kombi, itp.) |
Forms2OleControlCollection | Zbiór potomnych węzłów Forms2OleControl (np. wewnątrz ramki) |
Forms2OleControlType | Wyliczenie rodzajów kontrolek Forms 2.0 |