Oggetti OLE e controlli ActiveX
Oggetti OLE e controlli ActiveX
FOSS per .NET fornisce l’accesso in sola lettura agli oggetti OLE incorporati e ai controlli Forms 2.0 ActiveX tramite il punto di ingresso OleFormat e le sue classi correlate in Aspose.Words.Drawing e Aspose.Words.Drawing.Ole.
Accesso ai dati degli oggetti OLE incorporati
OleFormat è esposto da un Shape incorporato e fornisce l’accesso ai dati grezzi e ai metadati dell’oggetto incorporato. SuggestedFileName e SuggestedExtension descrivono come verrebbe salvato l’oggetto incorporato, ProgId identifica l’applicazione server OLE che lo ha creato, e IsLink distingue un oggetto collegato (SourceFullName/SourceItem puntano alla fonte esterna) da uno completamente incorporato. GetOleEntry(oleEntryName) legge un flusso nominato specifico dalla struttura del file composto OLE, GetRawData() restituisce l’intero dato grezzo dell’oggetto, e Save(fileName) / Save(stream) scrivono i dati nativi dell’oggetto incorporato su disco o su uno stream — utile per estrarre il file originale incorporato (ad esempio un foglio di calcolo o una presentazione incorporata) senza aprirlo nella sua applicazione nativa. OlePackage, raggiunto tramite OleFormat.OlePackage, espone FileName e DisplayName per gli oggetti incorporati come OLE Package.
Lavorare con i controlli Forms 2.0 ActiveX
Dove l’oggetto incorporato è un controllo Microsoft Forms 2.0 ActiveX (caselle di controllo, caselle di testo, caselle combinate e controlli interattivi simili anziché documenti incorporati), OleFormat.OleControl restituisce un OleControl. Controlla la proprietà IsForms2OleControl, e se true, effettua il cast a Forms2OleControl (la classe base astratta per tutti i controlli Forms 2.0) per accedere alle proprietà specifiche del controllo: Caption, Value, Enabled, Type (un valore Forms2OleControlType — CheckBox, Textbox, ComboBox, OptionButton, ListBox, CommandButton e altri), più le proprietà visive ForeColor, BackColor, Width e Height. I controlli contenitore, come i frame, espongono i loro controlli nidificati tramite ChildNodes, un Forms2OleControlCollection.
Suggerimenti e buone pratiche
- Verifica
OleFormat.IsLinkprima di presumere che i dati dell’oggetto incorporato siano presenti localmente — gli oggetti collegati fanno riferimento a un file esterno tramiteSourceFullNameinvece di incorporarne il contenuto. - Utilizza
SuggestedExtensioninsieme aSave()per ricostruire un nome file di output sensato quando estrai oggetti incorporati in blocco. - Controlla sempre
OleControl.IsForms2OleControlprima di effettuare il cast aForms2OleControl— non ogniOleControlè un controllo Forms 2.0. Forms2OleControlCollection.Counte l’enumerazione tramiteGetEnumerator()ti consentono di attraversare i controlli nidificati all’interno di un frame o di un controllo contenitore a più pagine.
Problemi comuni
| Problema | Causa | Correzione |
|---|---|---|
GetRawData() restituisce dati inattesi/vuoti | L’oggetto è un collegamento (IsLink == true), non incorporato | Controlla prima IsLink; risolvi SourceFullName per gli oggetti collegati |
Casting di InvalidCastException da OleControl a Forms2OleControl | Il controllo non è un controllo Forms 2.0 | Verifica IsForms2OleControl prima del cast |
GetOleEntry() restituisce null per un flusso denominato | Il nome del flusso non esiste nella struttura di file composito di questo oggetto | Elenca i nomi delle voci effettive anziché presumere un nome fisso |
| Controlli nidificati all’interno di un frame non trovati | Verificato solo il OleControl di livello superiore, non ChildNodes | Ricorri in Forms2OleControl.ChildNodes per i controlli del contenitore |
FAQ
Come posso estrarre un oggetto Excel o PowerPoint incorporato da un documento Word?
Accedi al OleFormat della forma, quindi chiama Save(fileName) o GetRawData() per recuperare i byte nativi dell’oggetto incorporato; usa SuggestedExtension per denominare correttamente il file di output.
Qual è la differenza tra un oggetto OLE incorporato e un controllo Forms 2.0?
Un oggetto OLE incorporato (accessibile tramite OleFormat direttamente) è tipicamente un altro documento (foglio di calcolo, presentazione); un controllo Forms 2.0 (OleFormat.OleControl → Forms2OleControl) è un elemento UI interattivo come una casella di controllo o una casella di testo.
Come faccio a capire se un oggetto OLE è collegato anziché incorporato?
Controlla OleFormat.IsLink — quando true, SourceFullName e SourceItem descrivono la fonte esterna invece dell’oggetto che trasporta i propri dati.
Posso leggere la didascalia o il valore di un controllo checkbox?
Sì — esegui il cast del OleControl a Forms2OleControl (dopo aver confermato IsForms2OleControl) e leggi Caption e Value.
API Reference Riepilogo
| Classe / Metodo | Descrizione |
|---|---|
OleFormat | Punto di ingresso per i dati e i metadati di un oggetto OLE incorporato |
OleFormat.GetRawData() | Recupera i byte grezzi dell’oggetto incorporato |
OleFormat.Save() | Salva i dati nativi dell’oggetto incorporato in un file o stream |
OlePackage | Nome file/nome visualizzato per un oggetto OLE Package |
OleControl | Rappresentazione di base di un controllo ActiveX incorporato |
Forms2OleControl | Controllo Microsoft Forms 2.0 (casella di controllo, casella di testo, casella combinata, ecc.) |
Forms2OleControlCollection | Raccolta di nodi Forms2OleControl figli (ad es. all’interno di un frame) |
Forms2OleControlType | Enum dei tipi di controllo Forms 2.0 |