Oggetti OLE e controlli ActiveX

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.IsLink prima di presumere che i dati dell’oggetto incorporato siano presenti localmente — gli oggetti collegati fanno riferimento a un file esterno tramite SourceFullName invece di incorporarne il contenuto.
  • Utilizza SuggestedExtension insieme a Save() per ricostruire un nome file di output sensato quando estrai oggetti incorporati in blocco.
  • Controlla sempre OleControl.IsForms2OleControl prima di effettuare il cast a Forms2OleControl — non ogni OleControl è un controllo Forms 2.0.
  • Forms2OleControlCollection.Count e l’enumerazione tramite GetEnumerator() ti consentono di attraversare i controlli nidificati all’interno di un frame o di un controllo contenitore a più pagine.

Problemi comuni

ProblemaCausaCorrezione
GetRawData() restituisce dati inattesi/vuotiL’oggetto è un collegamento (IsLink == true), non incorporatoControlla prima IsLink; risolvi SourceFullName per gli oggetti collegati
Casting di InvalidCastException da OleControl a Forms2OleControlIl controllo non è un controllo Forms 2.0Verifica IsForms2OleControl prima del cast
GetOleEntry() restituisce null per un flusso denominatoIl nome del flusso non esiste nella struttura di file composito di questo oggettoElenca i nomi delle voci effettive anziché presumere un nome fisso
Controlli nidificati all’interno di un frame non trovatiVerificato solo il OleControl di livello superiore, non ChildNodesRicorri 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 / MetodoDescrizione
OleFormatPunto 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
OlePackageNome file/nome visualizzato per un oggetto OLE Package
OleControlRappresentazione di base di un controllo ActiveX incorporato
Forms2OleControlControllo Microsoft Forms 2.0 (casella di controllo, casella di testo, casella combinata, ecc.)
Forms2OleControlCollectionRaccolta di nodi Forms2OleControl figli (ad es. all’interno di un frame)
Forms2OleControlTypeEnum dei tipi di controllo Forms 2.0

Vedi anche

 Italiano