Obiecte OLE și controale ActiveX
Obiecte OLE și controale ActiveX
Aspose.Words FOSS pentru .NET oferă acces de citire la obiectele OLE încorporate și la controalele Forms 2.0 ActiveX prin punctul de intrare OleFormat și clasele sale conexe din Aspose.Words.Drawing și Aspose.Words.Drawing.Ole.
Accesarea datelor obiectului OLE încorporat
OleFormat este expus de un Shape încorporat și oferă acces la datele brute și la metadatele obiectului încorporat. SuggestedFileName și SuggestedExtension descriu cum ar fi salvat obiectul încorporat, ProgId identifică aplicația server OLE care l-a creat, iar IsLink diferențiază un obiect legat (SourceFullName/SourceItem indică sursa externă) de unul complet încorporat. GetOleEntry(oleEntryName) citește un flux numit specific din structura fișierului compus OLE, GetRawData() returnează datele brute complete ale obiectului, și Save(fileName) / Save(stream) scriu datele native ale obiectului încorporat pe disc sau într-un flux — util pentru extragerea fișierului încorporat original (de exemplu o foaie de calcul sau o prezentare încorporată) fără a-l deschide în aplicația sa nativă. OlePackage, accesat prin OleFormat.OlePackage, expune FileName și DisplayName pentru obiecte încorporate ca Pachet OLE.
Lucrul cu controalele Forms 2.0 ActiveX
În cazul în care obiectul încorporat este un control Microsoft Forms 2.0 ActiveX (casete de selectare, casete de text, liste derulante și controale interactive similare, în loc de documente încorporate), OleFormat.OleControl returnează un OleControl. Verificați proprietatea IsForms2OleControl, și dacă true, convertiți-o la Forms2OleControl (clasa de bază abstractă pentru toate controalele Forms 2.0) pentru a accesa proprietățile specifice controlului: Caption, Value, Enabled, Type (o valoare Forms2OleControlType — CheckBox, Textbox, ComboBox, OptionButton, ListBox, CommandButton și altele), plus proprietățile vizuale ForeColor, BackColor, Width și Height. Controalele container, cum ar fi cadrele, expun controalele lor încorporate prin ChildNodes, un Forms2OleControlCollection.
Sfaturi și bune practici
- Verificați
OleFormat.IsLinkînainte de a presupune că datele obiectului încorporat sunt prezente local — obiectele legate fac referire la un fișier extern prinSourceFullNameîn loc să încorporeze conținutul lor. - Utilizați
SuggestedExtensionîmpreună cuSave()pentru a reconstrui un nume de fișier de ieșire coerent atunci când extrageți în masă obiecte încorporate. - Verificați întotdeauna
OleControl.IsForms2OleControlînainte de a converti laForms2OleControl— nu fiecareOleControleste un control Forms 2.0. Forms2OleControlCollection.Countși enumerarea prinGetEnumerator()vă permit să parcurgeți controalele imbricate dintr-un cadru sau un control container cu pagini multiple.
Probleme comune
| Problemă | Cauză | Remediere |
|---|---|---|
GetRawData() returnează date neașteptate/goale | Obiectul este un link (IsLink == true), nu este încorporat | Verificați mai întâi IsLink; rezolvați SourceFullName pentru obiectele legate |
InvalidCastException casting OleControl la Forms2OleControl | Controlul nu este un control Forms 2.0 | Verificați IsForms2OleControl înainte de a face conversia |
GetOleEntry() returnează null pentru un flux numit | Numele fluxului nu există în structura de fișiere compuse a acestui obiect | Enumerați numele reale ale intrărilor în loc să presupuneți un nume fix |
| Controalele imbricate din interiorul unui cadru nu au fost găsite | S-a verificat doar OleControl de nivel superior, nu ChildNodes | Recursă în Forms2OleControl.ChildNodes pentru controalele container |
FAQ
Cum pot extrage un obiect Excel sau PowerPoint încorporat dintr-un document Word?
Accesați OleFormat al formei, apoi apelați Save(fileName) sau GetRawData() pentru a recupera octeții nativi ai obiectului încorporat; folosiți SuggestedExtension pentru a denumi fișierul de ieșire în mod corespunzător.
Care este diferența dintre un obiect OLE încorporat și un control Forms 2.0?
Un obiect OLE încorporat (accesat prin OleFormat direct) este de obicei un alt document (foaie de calcul, prezentare); un control Forms 2.0 (OleFormat.OleControl → Forms2OleControl) este un element UI interactiv, cum ar fi o casetă de bifare sau o casetă de text.
Cum pot să determin dacă un obiect OLE este legat în loc de încorporat?
Verifică OleFormat.IsLink — când true, SourceFullName și SourceItem descriu sursa externă în loc de obiectul care conține propriile date.
Pot să citesc legenda sau valoarea unui control de tip casetă de bifare?
Da — convertește OleControl la Forms2OleControl (după ce confirmi IsForms2OleControl) și citește Caption și Value.
API Reference Rezumat
| Clasă / Metodă | Descriere: |
|---|---|
OleFormat | Punct de intrare pentru datele și metadatele unui obiect OLE încorporat |
OleFormat.GetRawData() | Recuperează octeții brute ale obiectului încorporat |
OleFormat.Save() | Salvează datele native ale obiectului încorporat într-un fișier sau flux |
OlePackage | Nume de fișier/nume de afișare pentru un obiect OLE Package |
OleControl | Reprezentare de bază a unui control ActiveX încorporat |
Forms2OleControl | Control Microsoft Forms 2.0 (checkbox, textbox, combo box, etc.) |
Forms2OleControlCollection | Colecție de noduri Forms2OleControl copil (de ex. în interiorul unui cadru) |
Forms2OleControlType | Enum al tipurilor de control Forms 2.0 |