Đối tượng OLE và Điều khiển ActiveX
Đối tượng OLE và Điều khiển ActiveX
Aspose.Words FOSS cho .NET cung cấp quyền truy cập đọc vào các đối tượng OLE được nhúng và các điều khiển Forms 2.0 ActiveX thông qua điểm vào OleFormat và các lớp liên quan trong Aspose.Words.Drawing và Aspose.Words.Drawing.Ole.
Truy cập dữ liệu đối tượng OLE được nhúng
OleFormat được cung cấp bởi một Shape được nhúng và cho phép truy cập vào dữ liệu thô và siêu dữ liệu của đối tượng được nhúng. SuggestedFileName và SuggestedExtension mô tả cách mà đối tượng được nhúng sẽ được lưu, ProgId xác định ứng dụng máy chủ OLE đã tạo ra nó, và IsLink phân biệt đối tượng liên kết (SourceFullName/SourceItem chỉ tới nguồn bên ngoài) với một đối tượng được nhúng hoàn toàn. GetOleEntry(oleEntryName) đọc một luồng có tên cụ thể từ cấu trúc tệp hợp OLE, GetRawData() trả về dữ liệu thô đầy đủ của đối tượng, và Save(fileName) / Save(stream) ghi dữ liệu gốc của đối tượng nhúng ra đĩa hoặc luồng — hữu ích để trích xuất tệp gốc được nhúng (ví dụ như một bảng tính hoặc bản trình bày được nhúng) mà không cần mở nó trong ứng dụng gốc. OlePackage, được truy cập qua OleFormat.OlePackage, hiển thị FileName và DisplayName cho các đối tượng được nhúng dưới dạng OLE Package.
Làm việc với các Điều khiển ActiveX của Forms 2.0
Khi đối tượng được nhúng là một điều khiển ActiveX của Microsoft Forms 2.0 (ô chọn, ô văn bản, hộp combo và các điều khiển tương tác tương tự thay vì tài liệu được nhúng), OleFormat.OleControl trả về một OleControl. Kiểm tra thuộc tính IsForms2OleControl của nó, và nếu true, ép kiểu nó sang Forms2OleControl (lớp cơ sở trừu tượng cho tất cả các điều khiển Forms 2.0) để truy cập các thuộc tính riêng biệt của điều khiển: Caption, Value, Enabled, Type (một giá trị Forms2OleControlType — CheckBox, Textbox, ComboBox, OptionButton, ListBox, CommandButton, và các giá trị khác), cùng với các thuộc tính hiển thị ForeColor, BackColor, Width, và Height. Các điều khiển chứa như khung (frame) hiển thị các điều khiển lồng nhau của chúng thông qua ChildNodes, một Forms2OleControlCollection.
Mẹo và Thực hành tốt nhất
- Kiểm tra
OleFormat.IsLinktrước khi cho rằng dữ liệu đối tượng nhúng có sẵn cục bộ — các đối tượng liên kết tham chiếu tới tệp bên ngoài quaSourceFullNamethay vì nhúng nội dung của chúng. - Sử dụng
SuggestedExtensionkết hợp vớiSave()để tái tạo tên tệp đầu ra hợp lý khi trích xuất hàng loạt các đối tượng nhúng. - Luôn kiểm tra
OleControl.IsForms2OleControltrước khi ép kiểu sangForms2OleControl— không phải mọiOleControlđều là điều khiển Forms 2.0. Forms2OleControlCollection.Countvà việc liệt kê quaGetEnumerator()cho phép bạn duyệt các điều khiển lồng nhau bên trong một khung hoặc điều khiển container đa trang.
Các vấn đề thường gặp
| Vấn đề | Nguyên nhân | Cách khắc phục |
|---|---|---|
GetRawData() trả về dữ liệu không mong đợi/trống | Đối tượng là một liên kết (IsLink == true), không được nhúng | Kiểm tra IsLink trước; giải quyết SourceFullName cho các đối tượng được liên kết |
InvalidCastException ép kiểu OleControl sang Forms2OleControl | Control không phải là một điều khiển Forms 2.0 | Kiểm tra IsForms2OleControl trước khi ép kiểu |
GetOleEntry() trả về null cho một luồng có tên | Tên luồng không tồn tại trong cấu trúc tệp hợp chất của đối tượng này | Liệt kê các tên mục thực tế thay vì giả định một tên cố định |
| Không tìm thấy các điều khiển lồng nhau bên trong khung | Chỉ kiểm tra OleControl mức trên cùng, không phải ChildNodes | Đệ quy vào Forms2OleControl.ChildNodes để xử lý các điều khiển container |
FAQ
Làm thế nào để tôi trích xuất một đối tượng Excel hoặc PowerPoint đã được nhúng từ tài liệu Word?
Truy cập OleFormat của hình dạng, sau đó gọi Save(fileName) hoặc GetRawData() để lấy các byte gốc của đối tượng nhúng; sử dụng SuggestedExtension để đặt tên tệp đầu ra một cách phù hợp.
Sự khác biệt giữa đối tượng OLE được nhúng và điều khiển Forms 2.0 là gì?
Một đối tượng OLE được nhúng (truy cập qua OleFormat trực tiếp) thường là một tài liệu khác (bảng tính, bản trình bày); một điều khiển Forms 2.0 (OleFormat.OleControl → Forms2OleControl) là một phần tử giao diện người dùng tương tác như hộp kiểm hoặc ô văn bản.
Làm sao tôi biết một đối tượng OLE được liên kết thay vì được nhúng?
Kiểm tra OleFormat.IsLink — khi true, SourceFullName và SourceItem mô tả nguồn bên ngoài thay vì đối tượng chứa dữ liệu của riêng nó.
Tôi có thể đọc chú thích hoặc giá trị của điều khiển hộp kiểm không?
Có — chuyển OleControl sang Forms2OleControl (sau khi xác nhận IsForms2OleControl) và đọc Caption và Value.
API Reference Tóm tắt
| Lớp / Phương thức | Mô tả |
|---|---|
OleFormat | Điểm vào cho dữ liệu và siêu dữ liệu của đối tượng OLE được nhúng |
OleFormat.GetRawData() | Lấy các byte thô của đối tượng nhúng |
OleFormat.Save() | Lưu dữ liệu gốc của đối tượng nhúng vào tệp hoặc luồng |
OlePackage | Tên tệp/tên hiển thị cho đối tượng OLE Package |
OleControl | Biểu diễn cơ bản của một điều khiển ActiveX được nhúng |
Forms2OleControl | Điều khiển Microsoft Forms 2.0 (hộp kiểm, ô văn bản, hộp combo, v.v.) |
Forms2OleControlCollection | Tập hợp các nút Forms2OleControl con (ví dụ: bên trong một khung) |
Forms2OleControlType | Liệt kê các loại điều khiển Forms 2.0 |