อ็อบเจกต์ 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 ลูก (เช่น ภายในเฟรม) |
Forms2OleControlType | Enum ของชนิดคอนโทรล Forms 2.0 |