OLE-objekt och ActiveX-kontroller
OLE-objekt och ActiveX-kontroller
Aspose.Words FOSS för .NET ger läsåtkomst till inbäddade OLE-objekt och Forms 2.0 ActiveX-kontroller via OleFormat-ingångspunkten och dess relaterade klasser i Aspose.Words.Drawing och Aspose.Words.Drawing.Ole.
Åtkomst till inbäddade OLE-objektsdata
OleFormat exponeras av en inbäddad Shape och ger åtkomst till den råa datan och metadata för det inbäddade objektet. SuggestedFileName och SuggestedExtension beskriver hur det inbäddade objektet skulle sparas, ProgId identifierar OLE-serverapplikationen som skapade det, och IsLink skiljer ett länkat objekt (SourceFullName/SourceItem pekar på den externa källan) från ett helt inbäddat. GetOleEntry(oleEntryName) läser en specifik namngiven ström från OLE:s sammansatta filstruktur, GetRawData() returnerar den kompletta råa objektdatan, och Save(fileName) / Save(stream) skriver det inbäddade objektets ursprungliga data till disk eller en ström — användbart för att extrahera den ursprungliga inbäddade filen (till exempel ett inbäddat kalkylblad eller en presentation) utan att öppna den i dess ursprungliga program. OlePackage, nås via OleFormat.OlePackage, exponerar FileName och DisplayName för objekt inbäddade som ett OLE-paket.
Arbeta med Forms 2.0 ActiveX-kontroller
Där det inbäddade objektet är en Microsoft Forms 2.0 ActiveX-kontroll (kryssrutor, textrutor, kombinationsrutor och liknande interaktiva kontroller snarare än inbäddade dokument), returnerar OleFormat.OleControl ett OleControl. Kontrollera dess IsForms2OleControl-egenskap, och om true, kasta det till Forms2OleControl (den abstrakta basklassen för alla Forms 2.0-kontroller) för att nå kontrollspecifika egenskaper: Caption, Value, Enabled, Type (ett Forms2OleControlType-värde — CheckBox, Textbox, ComboBox, OptionButton, ListBox, CommandButton och andra), samt visuella egenskaper ForeColor, BackColor, Width och Height. Behållarkontroller såsom ramar exponerar sina nästlade kontroller via ChildNodes, en Forms2OleControlCollection.
Tips och bästa praxis
- Kontrollera
OleFormat.IsLinkinnan du antar att inbäddad objektdata finns lokalt — länkade objekt refererar till en extern fil viaSourceFullNameistället för att bädda in deras innehåll. - Använd
SuggestedExtensiontillsammans medSave()för att återskapa ett rimligt utdatafilnamn när du extraherar inbäddade objekt i bulk. - Kontrollera alltid
OleControl.IsForms2OleControlinnan du kastar tillForms2OleControl— inte varjeOleControlär en Forms 2.0-kontroll. Forms2OleControlCollection.Countoch uppräkning viaGetEnumerator()låter dig gå igenom nästlade kontroller i en ram eller en flersidig behållarkontroll.
Vanliga problem
| Problem | Orsak | Åtgärd |
|---|---|---|
GetRawData() returnerar oväntade/tomma data | Objektet är en länk (IsLink == true), inte inbäddat | Kontrollera IsLink först; lös SourceFullName för länkade objekt |
InvalidCastException kastar OleControl till Forms2OleControl | Kontrollen är inte en Forms 2.0-kontroll | Kontrollera IsForms2OleControl innan du castar |
GetOleEntry() returnerar null för en namngiven ström | Strömnamen finns inte i detta objekts sammansatta filstruktur | Enumerera de faktiska postnamnen snarare än att anta ett fast namn |
| Inbäddade kontroller i en ram hittades inte | Kontrollerade bara topnivå-OleControl, inte ChildNodes | Rekursera in i Forms2OleControl.ChildNodes för behållarkontroller |
FAQ
Hur extraherar jag ett inbäddat Excel- eller PowerPoint-objekt från ett Word-dokument?
Åtkomst till formens OleFormat, anropa sedan Save(fileName) eller GetRawData() för att hämta det inbäddade objektets ursprungliga byte; använd SuggestedExtension för att namnge utdatafilen på lämpligt sätt.
Vad är skillnaden mellan ett inbäddat OLE-objekt och en Forms 2.0-kontroll?
Ett inbäddat OLE-objekt (åtkomligt via OleFormat direkt) är vanligtvis ett annat dokument (kalkylblad, presentation); en Forms 2.0-kontroll (OleFormat.OleControl → Forms2OleControl) är ett interaktivt UI-element som en kryssruta eller textruta.
Hur kan jag avgöra om ett OLE-objekt är länkat snarare än inbäddat?
Kontrollera OleFormat.IsLink — när true, SourceFullName och SourceItem beskriver den externa källan istället för att objektet bär sin egen data.
Kan jag läsa rubriken eller värdet för en checkbox-kontroll?
Ja — kasta OleControl till Forms2OleControl (efter att ha bekräftat IsForms2OleControl) och läs Caption och Value.
API Reference Sammanfattning
| Klass / Metod | Beskrivning |
|---|---|
OleFormat | Ingångspunkt för en inbäddad OLE-objekts data och metadata |
OleFormat.GetRawData() | Hämta de råa inbäddade objektbytena |
OleFormat.Save() | Spara det inbäddade objektets ursprungliga data till en fil eller ström |
OlePackage | Filnamn/visningsnamn för ett OLE-paketobjekt |
OleControl | Basrepresentation av en inbäddad ActiveX-kontroll |
Forms2OleControl | Microsoft Forms 2.0-kontroll (kryssruta, textruta, kombinationsruta, etc.) |
Forms2OleControlCollection | Samling av underordnade Forms2OleControl-noder (t.ex. i en ram) |
Forms2OleControlType | Enum av Forms 2.0-kontrolltyper |