Objek OLE dan Kontrol ActiveX
Objek OLE dan Kontrol ActiveX
Aspose.Words FOSS untuk .NET menyediakan akses baca ke objek OLE yang disematkan dan kontrol ActiveX Forms 2.0 melalui titik masuk OleFormat dan kelas terkaitnya di Aspose.Words.Drawing dan Aspose.Words.Drawing.Ole.
Mengakses Data Objek OLE yang Disematkan
OleFormat diekspos oleh sebuah Shape yang disematkan dan menyediakan akses ke data mentah serta metadata dari objek yang disematkan. SuggestedFileName dan SuggestedExtension menjelaskan bagaimana objek yang disematkan akan disimpan, ProgId mengidentifikasi aplikasi server OLE yang membuatnya, dan IsLink membedakan objek yang ditautkan (SourceFullName/SourceItem menunjuk ke sumber eksternal) dari yang sepenuhnya disematkan. GetOleEntry(oleEntryName) membaca aliran bernama tertentu dari struktur berkas gabungan OLE, GetRawData() mengembalikan data mentah objek secara lengkap, dan Save(fileName) / Save(stream) menulis data asli objek yang disematkan ke disk atau aliran — berguna untuk mengekstrak berkas asli yang disematkan (misalnya spreadsheet atau presentasi yang disematkan) tanpa membukanya di aplikasi aslinya. OlePackage, yang dicapai melalui OleFormat.OlePackage, mengekspos FileName dan DisplayName untuk objek yang disematkan sebagai OLE Package.
Bekerja dengan Kontrol ActiveX Forms 2.0
Ketika objek yang disematkan merupakan kontrol ActiveX Microsoft Forms 2.0 (kotak centang, kotak teks, kotak kombo, dan kontrol interaktif serupa bukan dokumen yang disematkan), OleFormat.OleControl mengembalikan sebuah OleControl. Periksa properti IsForms2OleControl-nya, dan jika true, cast ke Forms2OleControl (kelas dasar abstrak untuk semua kontrol Forms 2.0) untuk mengakses properti khusus kontrol: Caption, Value, Enabled, Type (nilai Forms2OleControlType — CheckBox, Textbox, ComboBox, OptionButton, ListBox, CommandButton, dan lainnya), serta properti visual ForeColor, BackColor, Width, dan Height. Kontrol kontainer seperti frame mengekspos kontrol bersarang mereka melalui ChildNodes, sebuah Forms2OleControlCollection.
Tips dan Praktik Terbaik
- Periksa
OleFormat.IsLinksebelum mengasumsikan data objek tersemat ada secara lokal — objek yang ditautkan merujuk ke file eksternal melaluiSourceFullNamealih-alih menyematkan kontennya. - Gunakan
SuggestedExtensionbersama denganSave()untuk menyusun nama file keluaran yang masuk akal saat mengekstrak objek tersemat secara massal. - Selalu periksa
OleControl.IsForms2OleControlsebelum mengubah tipe keForms2OleControl— tidak setiapOleControladalah kontrol Forms 2.0. Forms2OleControlCollection.Countdan enumerasi melaluiGetEnumerator()memungkinkan Anda menelusuri kontrol bersarang di dalam bingkai atau kontrol wadah multi-halaman.
Masalah Umum
| Masalah | Penyebab | Perbaikan |
|---|---|---|
GetRawData() mengembalikan data yang tidak terduga atau kosong | Objek adalah tautan (IsLink == true), bukan tersemat | Periksa IsLink terlebih dahulu; selesaikan SourceFullName untuk objek yang ditautkan |
InvalidCastException melakukan casting OleControl menjadi Forms2OleControl | Kontrol bukan kontrol Forms 2.0 | Periksa IsForms2OleControl sebelum melakukan casting |
GetOleEntry() mengembalikan null untuk stream bernama | Nama stream tidak ada dalam struktur file komposit objek ini | Enumerasikan nama entri sebenarnya alih-alih mengasumsikan nama tetap |
| Kontrol bersarang di dalam frame tidak ditemukan | Hanya memeriksa OleControl tingkat atas, bukan ChildNodes | Lakukan rekursi ke Forms2OleControl.ChildNodes untuk kontrol kontainer |
FAQ
Bagaimana cara mengekstrak objek Excel atau PowerPoint yang tersemat dari dokumen Word?
Akses OleFormat dari shape, lalu panggil Save(fileName) atau GetRawData() untuk mengambil byte asli objek tersemat; gunakan SuggestedExtension untuk memberi nama file keluaran secara tepat.
Apa perbedaan antara objek OLE yang disematkan dan kontrol Forms 2.0?
Objek OLE yang disematkan (diakses melalui OleFormat secara langsung) biasanya merupakan dokumen lain (lembar kerja, presentasi); kontrol Forms 2.0 (OleFormat.OleControl → Forms2OleControl) adalah elemen UI interaktif seperti kotak centang atau kotak teks.
Bagaimana saya mengetahui apakah objek OLE tersebut ditautkan alih-alih disematkan?
Periksa OleFormat.IsLink — ketika true, SourceFullName dan SourceItem menggambarkan sumber eksternal alih-alih objek yang membawa data sendiri.
Bisakah saya membaca keterangan atau nilai dari kontrol kotak centang?
Ya — ubah tipe OleControl menjadi Forms2OleControl (setelah memastikan IsForms2OleControl) dan baca Caption serta Value.
API Reference Ringkasan
| Kelas / Metode | Deskripsi |
|---|---|
OleFormat | Titik masuk untuk data dan metadata objek OLE yang disematkan |
OleFormat.GetRawData() | Ambil byte mentah objek yang disematkan |
OleFormat.Save() | Simpan data asli objek tersemat ke file atau aliran |
OlePackage | Nama file/nama tampilan untuk objek OLE Package |
OleControl | Representasi dasar dari kontrol ActiveX yang tersemat |
Forms2OleControl | Kontrol Microsoft Forms 2.0 (checkbox, textbox, combo box, dll.) |
Forms2OleControlCollection | Koleksi node Forms2OleControl anak (misalnya di dalam sebuah frame) |
Forms2OleControlType | Enum jenis kontrol Forms 2.0 |