اشیاء OLE و کنترلهای ActiveX
شیءهای OLE و کنترلهای ActiveX
Aspose.Words FOSS برای .NET دسترسی فقط خواندنی به اشیای OLE جاسازیشده و کنترلهای Forms2.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 جاسازی شدهاند، در معرض میگذارد.
کار با کنترلهای Forms2.0 ActiveX
در جایی که شیء جاسازیشده یک کنترل Microsoft Forms2.0 ActiveX باشد (چکباکسها، جعبههای متن، کاندومباکسها و کنترلهای تعاملی مشابه به جای اسناد جاسازیشده)، OleFormat.OleControl یک OleControl را برمیگرداند. ویژگی IsForms2OleControl آن را بررسی کنید، و اگر true بود، آن را به Forms2OleControl (کلاس پایهٔ انتزاعی برای تمام کنترلهای Forms2.0) تبدیل کنید تا به ویژگیهای خاص کنترل دسترسی پیدا کنید: Caption، Value، Enabled، Type (یک مقدار Forms2OleControlType — CheckBox، Textbox، ComboBox، OptionButton، ListBox، CommandButton و سایرین)، بهعلاوهٔ ویژگیهای بصری ForeColor، BackColor، Width و Height. کنترلهای محفظهای مانند فریمها، کنترلهای تو در تو خود را از طریق ChildNodes، یک Forms2OleControlCollection، در دسترس میگذارند.
نکات و بهترین شیوهها
- قبل از اینکه فرض کنید دادهٔ شیء توکار بهصورت محلی موجود است،
OleFormat.IsLinkرا بررسی کنید — اشیاء پیوندی بهجای تعبیهٔ محتوا، از طریقSourceFullNameبه یک فایل خارجی ارجاع میدهند. - برای بازسازی یک نام فایل خروجی معقول هنگام استخراج دستهجمعی اشیاء توکار، از
SuggestedExtensionهمراه باSave()استفاده کنید. - همیشه قبل از تبدیل به
Forms2OleControl،OleControl.IsForms2OleControlرا بررسی کنید — هرOleControlیک کنترل Forms2.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) یک عنصر تعاملی رابط کاربری مانند یک چکباکس یا جعبه متن است.
چگونه میتوانم تشخیص دهم که یک شیء OLE پیوند داده شده است نه اینکه جاسازیشده باشد؟
OleFormat.IsLink را بررسی کنید — وقتی true، SourceFullName و SourceItem منبع خارجی را توصیف میکنند به جای اینکه شیء دادههای خود را حمل کند.
آیا میتوانم عنوان یا مقدار یک کنترل چکباکس را بخوانم؟
بله — OleControl را به Forms2OleControl تبدیل کنید (پس از تأیید IsForms2OleControl) و Caption و Value را بخوانید.
API Reference خلاصه
| کلاس / متد | توضیح |
|---|---|
OleFormat | نقطه ورودی برای دادهها و فرادادههای شیء OLE جاسازیشده |
OleFormat.GetRawData() | دریافت بایتهای خام شیء جاسازیشده |
OleFormat.Save() | دادههای بومی شیء جاسازیشده را در یک فایل یا جریان ذخیره کنید |
OlePackage | نام فایل/نام نمایش برای یک شیء بسته OLE |
OleControl | نمایش پایه یک کنترل ActiveX جاسازیشده |
Forms2OleControl | کنترل Microsoft Forms 2.0 (checkbox، textbox، combo box و غیره) |
Forms2OleControlCollection | مجموعهای از گرههای فرزند Forms2OleControl (مثلاً داخل یک فریم) |
Forms2OleControlType | Enum انواع کنترلهای Forms 2.0 |