OLE-Objekte und ActiveX-Steuerelemente
OLE-Objekte und ActiveX-Steuerelemente
Aspose.Words FOSS für .NET bietet Lesezugriff auf eingebettete OLE-Objekte und Forms-2.0-ActiveX-Steuerelemente über den OleFormat-Einstiegspunkt und die zugehörigen Klassen in Aspose.Words.Drawing und Aspose.Words.Drawing.Ole.
Zugriff auf eingebettete OLE-Objektdaten
OleFormat wird von einem eingebetteten Shape bereitgestellt und ermöglicht Zugriff auf die Rohdaten und Metadaten des eingebetteten Objekts. SuggestedFileName und SuggestedExtension beschreiben, unter welchem Namen das eingebettete Objekt gespeichert würde, ProgId identifiziert die OLE-Server-Anwendung, die es erstellt hat, und IsLink unterscheidet ein verknüpftes Objekt (SourceFullName/SourceItem zeigen auf die externe Quelle) von einem vollständig eingebetteten. GetOleEntry(oleEntryName) liest einen bestimmten benannten Stream aus der OLE-Compound-Dateistruktur, GetRawData() liefert die vollständigen Rohobjektdaten zurück, und Save(fileName) / Save(stream) schreiben die nativen Daten des eingebetteten Objekts auf die Festplatte oder in einen Stream — nützlich, um die ursprüngliche eingebettete Datei (z.B. eine eingebettete Tabellenkalkulation oder Präsentation) zu extrahieren, ohne sie in ihrer nativen Anwendung zu öffnen. OlePackage, erreicht über OleFormat.OlePackage, stellt FileName und DisplayName für als OLE-Package eingebettete Objekte bereit.
Arbeiten mit Forms-2.0-ActiveX-Steuerelementen
Wenn das eingebettete Objekt ein Microsoft Forms2.0-ActiveX-Steuerelement ist (Kontrollkästchen, Textfelder, Kombinationsfelder und ähnliche interaktive Steuerelemente statt eingebetteter Dokumente), gibt OleFormat.OleControl ein OleControl zurück. Prüfen Sie dessen IsForms2OleControl-Eigenschaft, und falls true, casten Sie es zu Forms2OleControl (der abstrakten Basisklasse für alle Forms-2.0-Steuerelemente), um steuerspezifische Eigenschaften zu erreichen: Caption, Value, Enabled, Type (ein Forms2OleControlType-Wert — CheckBox, Textbox, ComboBox, OptionButton, ListBox, CommandButton und weitere), sowie visuelle Eigenschaften ForeColor, BackColor, Width und Height. Container-Steuerelemente wie Frames stellen ihre verschachtelten Steuerelemente über ChildNodes bereit, ein Forms2OleControlCollection.
Tipps und bewährte Vorgehensweisen
- Überprüfen Sie
OleFormat.IsLink, bevor Sie annehmen, dass eingebettete Objektdaten lokal vorhanden sind — verknüpfte Objekte verweisen überSourceFullNameauf eine externe Datei, anstatt ihren Inhalt einzubetten. - Verwenden Sie
SuggestedExtensionzusammen mitSave(), um bei der massenhaften Extraktion eingebetteter Objekte einen sinnvollen Ausgabedateinamen zu rekonstruieren. - Überprüfen Sie stets
OleControl.IsForms2OleControl, bevor Sie zuForms2OleControlcasten — nicht jedesOleControlist ein Forms-2.0-Steuerelement. Forms2OleControlCollection.Countund die Aufzählung überGetEnumerator()ermöglichen das Durchlaufen verschachtelter Steuerelemente innerhalb eines Rahmens oder eines mehrseitigen Container-Steuerelements.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
GetRawData() gibt unerwartete/leere Daten zurück | Objekt ist ein Link (IsLink == true), nicht eingebettet | Prüfen Sie zuerst IsLink; lösen Sie SourceFullName für verknüpfte Objekte |
InvalidCastException wandelt OleControl in Forms2OleControl um | Steuerelement ist kein Forms 2.0-Steuerelement | Prüfen Sie IsForms2OleControl vor dem Casten |
GetOleEntry() gibt null für einen benannten Stream zurück | Der Stream-Name existiert nicht in der zusammengesetzten Dateistruktur dieses Objekts | Enumerieren Sie die tatsächlichen Eintragsnamen, anstatt einen festen Namen anzunehmen |
| Verschachtelte Steuerelemente innerhalb eines Frames nicht gefunden | Nur das oberste OleControl geprüft, nicht ChildNodes | Rekursiv in Forms2OleControl.ChildNodes für Container-Steuerelemente |
FAQ
Wie extrahiere ich ein eingebettetes Excel- oder PowerPoint-Objekt aus einem Word-Dokument?
Greifen Sie auf das OleFormat der Form zu, rufen Sie dann Save(fileName) oder GetRawData() auf, um die nativen Bytes des eingebetteten Objekts abzurufen; verwenden Sie SuggestedExtension, um die Ausgabedatei passend zu benennen.
Was ist der Unterschied zwischen einem eingebetteten OLE-Objekt und einer Forms2.0-Steuerung?
Ein eingebettetes OLE-Objekt (direkt über OleFormat aufgerufen) ist typischerweise ein anderes Dokument (Tabellendokument, Präsentation); eine Forms2.0-Steuerung (OleFormat.OleControl → Forms2OleControl) ist ein interaktives UI-Element wie ein Kontrollkästchen oder ein Textfeld.
Wie erkenne ich, ob ein OLE-Objekt verknüpft statt eingebettet ist?
Prüfen Sie OleFormat.IsLink— wenn true, SourceFullName und SourceItem die externe Quelle beschreiben, anstatt dass das Objekt eigene Daten trägt.
Kann ich die Beschriftung oder den Wert einer Kontrollkästchen-Steuerung auslesen?
Ja— casten Sie OleControl zu Forms2OleControl (nach Bestätigung von IsForms2OleControl) und lesen Sie Caption und Value aus.
API Reference Zusammenfassung
| Klasse / Methode | Beschreibung |
|---|---|
OleFormat | Einstiegspunkt für die Daten und Metadaten eines eingebetteten OLE-Objekts |
OleFormat.GetRawData() | Rufen Sie die rohen Bytes des eingebetteten Objekts ab |
OleFormat.Save() | Speichern Sie die nativen Daten des eingebetteten Objekts in einer Datei oder einem Stream |
OlePackage | Dateiname/Anzeigename für ein OLE-Paket-Objekt |
OleControl | Grundrepräsentation eines eingebetteten ActiveX-Steuerelements |
Forms2OleControl | Microsoft Forms2.0-Steuerelement (Kontrollkästchen, Textfeld, Kombinationsfeld usw.) |
Forms2OleControlCollection | Sammlung von untergeordneten Forms2OleControl-Knoten (z.B. innerhalb eines Rahmens) |
Forms2OleControlType | Aufzählung der Forms2.0-Steuerelementarten |