อ็อบเจกต์ OLE และคอนโทรล ActiveX

อ็อบเจกต์ OLE และคอนโทรล ActiveX

วัตถุ OLE และ ActiveX Controls

Aspose.Words FOSS สำหรับ .NET ให้การเข้าถึงแบบอ่านสำหรับวัตถุ OLE ที่ฝังอยู่และคอนโทรล Forms 2.0 ActiveX ผ่านจุดเข้าถึง OleFormat และคลาสที่เกี่ยวข้องใน Aspose.Words.Drawing และ Aspose.Words.Drawing.Ole.


การเข้าถึงข้อมูลวัตถุ OLE ที่ฝังอยู่

OleFormat ถูกเปิดเผยโดย Shape ที่ฝังอยู่และให้การเข้าถึงข้อมูลดิบและเมตาดาตาของวัตถุที่ฝังอยู่. SuggestedFileName และ SuggestedExtension บรรยายว่าวัตถุที่ฝังจะถูกบันทึกเป็นอะไร, ProgId ระบุแอปพลิเคชันเซิร์ฟเวอร์ OLE ที่สร้างมัน, และ IsLink แยกแยะวัตถุที่เชื่อมโยง (SourceFullName/SourceItem ชี้ไปยังแหล่งภายนอก) จากวัตถุที่ฝังเต็มรูปแบบ. GetOleEntry(oleEntryName) อ่านสตรีมที่มีชื่อเฉพาะจากโครงสร้างไฟล์คอมพาวนด์ OLE, GetRawData() ส่งคืนข้อมูลดิบของวัตถุทั้งหมด, และ Save(fileName) / Save(stream) เขียนข้อมูลดั้งเดิมของวัตถุที่ฝังออกไปยังดิสก์หรือสตรีม — มีประโยชน์สำหรับการสกัดไฟล์ที่ฝังต้นฉบับ (เช่นสเปรดชีตหรือการนำเสนอที่ฝัง) โดยไม่ต้องเปิดในแอปพลิเคชันดั้งเดิมของมัน. OlePackage ที่เข้าถึงได้ผ่าน OleFormat.OlePackage, เปิดเผย FileName และ DisplayName สำหรับวัตถุที่ฝังเป็น OLE Package.


การทำงานกับ Forms 2.0 ActiveX Controls

เมื่อวัตถุที่ฝังเป็นคอนโทรล Microsoft Forms 2.0 ActiveX (เช่น เช็คบ็อกซ์, กล่องข้อความ, คอมโบบ็อกซ์ และคอนโทรลเชิงโต้ตอบอื่น ๆ แทนเอกสารที่ฝัง), OleFormat.OleControl คืนค่า OleControl. ตรวจสอบคุณสมบัติ IsForms2OleControl ของมัน, และถ้า true, แคสต์เป็น Forms2OleControl (คลาสฐานเชิงนามธรรมสำหรับคอนโทรล Forms 2.0 ทั้งหมด) เพื่อเข้าถึงคุณสมบัติเฉพาะคอนโทรล: Caption, Value, Enabled, Type (ค่าประเภท Forms2OleControlType — CheckBox, Textbox, ComboBox, OptionButton, ListBox, CommandButton, และอื่น ๆ), รวมถึงคุณสมบัติดูภาพ ForeColor, BackColor, Width, และ Height. คอนโทรลคอนเทนเนอร์เช่นเฟรมเปิดเผยคอนโทรลที่ซ้อนกันผ่าน ChildNodes, ซึ่งเป็น Forms2OleControlCollection.


เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุด

  • ตรวจสอบ OleFormat.IsLink ก่อนสันนิษฐานว่าข้อมูลวัตถุฝังอยู่ในเครื่อง — วัตถุที่เชื่อมโยงอ้างอิงไฟล์ภายนอกผ่าน SourceFullName แทนการฝังเนื้อหาไว้.
  • ใช้ SuggestedExtension ร่วมกับ Save() เพื่อสร้างชื่อไฟล์ผลลัพธ์ที่เหมาะสมเมื่อทำการสกัดวัตถุฝังในปริมาณมาก.
  • ตรวจสอบ OleControl.IsForms2OleControl เสมอก่อนทำการแปลงเป็น Forms2OleControl — ไม่ใช่ว่า OleControl ทุกตัวเป็นคอนโทรล Forms 2.0.
  • Forms2OleControlCollection.Count และการวนลูปผ่าน GetEnumerator() ทำให้คุณสามารถเดินผ่านคอนโทรลที่ซ้อนอยู่ภายในเฟรมหรือคอนเทนเนอร์หลายหน้าได้.

ปัญหาทั่วไป

ปัญหาสาเหตุวิธีแก้
GetRawData() ส่งคืนข้อมูลที่ไม่คาดคิด/ว่างวัตถุเป็นลิงก์ (IsLink == true) ไม่ได้ฝังไว้ตรวจสอบ IsLink ก่อน; แก้ไข SourceFullName สำหรับวัตถุที่ลิงก์
InvalidCastException แคสท์ OleControl เป็น Forms2OleControlคอนโทรลไม่ได้เป็นคอนโทรลของ Forms 2.0ตรวจสอบ IsForms2OleControl ก่อนทำการแคสต์
GetOleEntry() คืนค่า null สำหรับสตรีมที่มีชื่อชื่อสตรีมไม่มีอยู่ในโครงสร้างไฟล์ประกอบของอ็อบเจ็กต์นี้แสดงรายการชื่อรายการจริงแทนการสมมติชื่อคงที่
ไม่พบการควบคุมที่ซ้อนอยู่ภายในเฟรมตรวจสอบเฉพาะ OleControl ระดับบนสุด ไม่ได้ตรวจสอบ ChildNodesทำการเรียกซ้ำเข้าสู่ Forms2OleControl.ChildNodes สำหรับการควบคุมคอนเทนเนอร์

FAQ

ฉันจะสกัดวัตถุ Excel หรือ PowerPoint ที่ฝังอยู่จากเอกสาร Word อย่างไร?

เข้าถึง OleFormat ของรูปทรง จากนั้นเรียก Save(fileName) หรือ GetRawData() เพื่อดึงไบต์ดิบของวัตถุที่ฝังอยู่; ใช้ SuggestedExtension เพื่อกำหนดชื่อไฟล์ผลลัพธ์อย่างเหมาะสม.

ความแตกต่างระหว่างอ็อบเจ็กต์ OLE ที่ฝังไว้และคอนโทรล Forms 2.0 คืออะไร?

อ็อบเจ็กต์ OLE ที่ฝังไว้ (เข้าถึงผ่าน OleFormat โดยตรง) มักเป็นเอกสารอื่น (เช่น แผ่นงาน, งานนำเสนอ); คอนโทรล Forms 2.0 (OleFormat.OleControl → Forms2OleControl) คือองค์ประกอบ UI แบบโต้ตอบ เช่น กล่องทำเครื่องหมายหรือกล่องข้อความ.

ฉันจะบอกได้อย่างไรว่าอ็อบเจ็กต์ OLE ถูกลิงก์แทนที่จะฝัง?

ตรวจสอบ OleFormat.IsLink — เมื่อ true, SourceFullName และ SourceItem บรรยายแหล่งภายนอกแทนที่จะเป็นอ็อบเจ็กต์ที่บรรจุข้อมูลของตนเอง.

ฉันสามารถอ่านคำบรรยายหรือค่าของคอนโทรลกล่องทำเครื่องหมายได้หรือไม่?

ใช่ — แคสต์ OleControl เป็น Forms2OleControl (หลังจากยืนยัน IsForms2OleControl) แล้วอ่าน Caption และ Value.


API Reference สรุป

คลาส / เมธอดคำอธิบาย
OleFormatจุดเริ่มต้นสำหรับข้อมูลและเมตาดาทาของวัตถุ OLE ที่ฝังอยู่
OleFormat.GetRawData()ดึงไบต์ของวัตถุที่ฝังอยู่ในรูปแบบดิบ
OleFormat.Save()บันทึกข้อมูลดั้งเดิมของวัตถุที่ฝังลงไฟล์หรือสตรีม
OlePackageชื่อไฟล์/ชื่อที่แสดงสำหรับวัตถุ OLE Package
OleControlการแสดงผลฐานของคอนโทรล ActiveX ที่ฝังอยู่
Forms2OleControlคอนโทรล Microsoft Forms 2.0 (เช็คบ็อกซ์, กล่องข้อความ, คอมโบบ็อกซ์ ฯลฯ)
Forms2OleControlCollectionคอลเลกชันของโหนด Forms2OleControl ลูก (เช่น ภายในเฟรม)
Forms2OleControlTypeEnum ของชนิดคอนโทรล Forms 2.0

ดูเพิ่มเติม

 ภาษาไทย