مشاركة عبر


الحصول على كائنات موسّعة من كائنات Office أصلية في تخصيصات على مستوى المستند

ينطبق على

تنطبق المعلومات الموجودة في هذا الموضوع فقط على أنواع المشاريع وإصدارات Microsoft Office التالية: لمزيد من المعلومات، راجع الميزات المتوفرة بواسطة تطبيقات Office و نوع المشروع.

نوع المشروع

  • مشروعات على مستوى المستند

إصدار Microsoft Office

  • Excel 2007 و Excel 2010

  • Word 2007 و Word 2010

تتلقي العديد من معالجات الأحداث لأحداث Office كائن Office أصلي يمثل المصنف أو ورقة العمل أو المستند الذي رفع الحدث. في بعض الحالات، قد ترغب في تشغيل بعض التعليمات البرمجية فقط إذا قام المصنف أو المستند في التخصيص على مستوى المستند الخاص بك برفع الحدث. على سبيل المثال، في تخصيص على مستوى المستند لـ Excel، قد تحتاج إلى تشغيل بعض التعليمات البرمجية عند تنشيط المستخدم لأحد عناصر المضيف Microsoft.Office.Tools.Excel.Worksheet في التخصيص، ولكن ليس عند تنشيط المستخدم لورقة عمل في مصنف آخر مفتوح في نفس الوقت.

عند حصولك على كائن Office أصلي، يمكنك اختبار ما إذا كان قد تم توسيع ذلك الكائن إلى عنصر مضيف أو عنصر تحكم مضيف Microsoft.Office.Tools.Excel.ListObject في تخصيص على مستوى المستند.

عناصر المضيف وعناصر تحكم المضيف هي أنواع متوفرة من قبل Visual Studio Tools لوقت تشغيل Office الذي يضيف وظيفة للكائنات الموجودة أصلًا في نماذج كائن Word أو Excel (تسمى كائنات Office أصلية). بشكل جماعي، عناصر المضيف وعناصر تحكم المضيف تدعى أيضًا كائنات موسعة. لمزيد من المعلومات حول عناصر المضيف وعناصر تحكم المضيف، راجع نظرة عامة حول العناصر المضيفة و عناصر تحكم المضيف.

استخدام الأسلوبين GetVstoObject و HasVstoObject

إلى إنشاء مهمة، استخدم عنصر إنشاء HasVstoObject الطريقة الكائن، والمرور في القيمة للمعلمة.GetVstoObject كائن ContactItem

إذا كنت ترغب فقط في تحديد ما إذا كان لدى كائن Office الأصلي كائن موسع في التخصيص الخاص بك، استخدم الأسلوب HasVstoObject. يقوم هذا الأسلوب بإرجاع true إذا كان كائن Office الأصلي يحتوي على كائن موسع، وإلا فـ false.

إذا كنت تريد الحصول على الكائن الموسع، استخدم الأسلوب GetVstoObject. يقوم هذا الأسلوب بإرجاع كائن Microsoft.Office.Tools.Excel.ListObject أو Microsoft.Office.Tools.Excel.Workbook أو Microsoft.Office.Tools.Excel.Worksheet أو Microsoft.Office.Tools.Word.Document إذا كان لدى كائن Office الأصلي واحد. وإلا، فيقوم GetVstoObject بإرجاع null. على سبيل المثال، الأسلوب GetVstoObject من كائن Microsoft.Office.Interop.Word.Document يقوم بإرجاع Microsoft.Office.Tools.Word.Document إذا كان Microsoft.Office.Interop.Word.Document هو الكائن الأساسي للمستند في مشروع مستند Word الخاص بك.

ملاحظة

To use the GetVstoObject and HasVstoObject methods in document-level projects that target the .NET Framework 3.5, you must add using (for C#) or Imports (for Visual Basic) statements for the Microsoft.Office.Tools.Excel.Extensions or Microsoft.Office.Tools.Word.Extensions namespaces to the top of your code file. The GetVstoObject and HasVstoObject methods are implemented as extension methods, and these statements enable you to call these methods.

تحديد ما إذا كان قد قام عنصر مضيف برفع حدث ما

تشرح أمثلة التعليمات البرمجية التالية الأسلوبين HasVstoObject وGetVstoObject. كلا المثالين يقومان بمعالجة الحدث SheetActivate من الفئة ThisWorkbook في مشروع مصنف Excel.

المثال الأول يحدد ما إذا كان أحد عناصر المضيف Microsoft.Office.Tools.Excel.Worksheet تم تنشيطه عن طريق مقارنة المعلمة Sh بالخاصية InnerObject لكل عنصر مضيف افتراضي.

Sub ThisWorkbook_SheetActivate1(ByVal Sh As Object) Handles Me.SheetActivate
    Dim vstoWorksheet As Microsoft.Office.Tools.Excel.Worksheet = Nothing

    If Type.ReferenceEquals(Globals.Sheet1.InnerObject, Sh) Then
        vstoWorksheet = Globals.Sheet1.Base
    ElseIf Type.ReferenceEquals(Globals.Sheet2.InnerObject, Sh) Then
        vstoWorksheet = Globals.Sheet2.Base
    ElseIf Type.ReferenceEquals(Globals.Sheet3.InnerObject, Sh) Then
        vstoWorksheet = Globals.Sheet3.Base
    End If

    If vstoWorksheet IsNot Nothing Then
        ' Do something with the VSTO worksheet here.
    End If
End Sub
void ThisWorkbook_SheetActivate1(object Sh)
{
    Microsoft.Office.Tools.Excel.Worksheet vstoWorksheet = null;

    if (Type.ReferenceEquals(Globals.Sheet1.InnerObject, Sh))
        vstoWorksheet = Globals.Sheet1.Base;
    else if (Type.ReferenceEquals(Globals.Sheet2.InnerObject, Sh))
        vstoWorksheet = Globals.Sheet2.Base;
    else if (Type.ReferenceEquals(Globals.Sheet3.InnerObject, Sh))
        vstoWorksheet = Globals.Sheet3.Base;

    if (vstoWorksheet != null)
    {
        // Do something with the VSTO worksheet here.
    }
}

The next example simplifies this process by using the HasVstoObject and GetVstoObject methods of the Sh parameter. إنشاء مشروع المستوى المستندات أو المستوى تطبيق لبرنامج الكلمة 2007..NET Framework 4

Private Sub ThisWorkbook_SheetActivate2(ByVal Sh As Object)
    Dim vstoWorksheet As Microsoft.Office.Tools.Excel.Worksheet = Nothing
    Dim interopWorksheet As Microsoft.Office.Interop.Excel.Worksheet =
        CType(Sh, Microsoft.Office.Interop.Excel.Worksheet)

    If interopWorksheet IsNot Nothing AndAlso
        Globals.Factory.HasVstoObject(interopWorksheet) Then
        vstoWorksheet = Globals.Factory.GetVstoObject(interopWorksheet)
    End If

    If vstoWorksheet IsNot Nothing Then
        ' Do something with the VSTO worksheet here. 
    End If

End Sub
void ThisWorkbook_SheetActivate2(object Sh)
{
    Microsoft.Office.Tools.Excel.Worksheet vstoWorksheet = null;
    Microsoft.Office.Interop.Excel.Worksheet interopWorksheet =
        Sh as Microsoft.Office.Interop.Excel.Worksheet;

    if (interopWorksheet != null && Globals.Factory.HasVstoObject(interopWorksheet))
    {
        vstoWorksheet = Globals.Factory.GetVstoObject(interopWorksheet);
    }

    if (vstoWorksheet != null)
    {
        // Do something with the VSTO worksheet here.
    }
}

يوفر هذا الموضوع نظرة عامة حول أنواع حلول المكتب التي يمكنك إنشاء باستخدام أدوات تطوير المكتب في .

Sub ThisWorkbook_SheetActivate2(ByVal Sh As Object) Handles Me.SheetActivate
    Dim vstoWorksheet As Microsoft.Office.Tools.Excel.Worksheet = Nothing
    Dim interopWorksheet As Microsoft.Office.Interop.Excel.Worksheet = _
        CType(Sh, Microsoft.Office.Interop.Excel.Worksheet)

    If interopWorksheet IsNot Nothing AndAlso _
        interopWorksheet.HasVstoObject() Then
        vstoWorksheet = interopWorksheet.GetVstoObject()
    End If

    If vstoWorksheet IsNot Nothing Then
        ' Do something with the VSTO worksheet here.
    End If
End Sub
void ThisWorkbook_SheetActivate2(object Sh)
{
    Microsoft.Office.Tools.Excel.Worksheet vstoWorksheet = null;
    Microsoft.Office.Interop.Excel.Worksheet interopWorksheet = 
        Sh as Microsoft.Office.Interop.Excel.Worksheet;

    if (interopWorksheet != null && interopWorksheet.HasVstoObject())
    {
        vstoWorksheet = interopWorksheet.GetVstoObject();
    }

    if (vstoWorksheet != null)
    {
        // Do something with the VSTO worksheet here.
    }
}

إنشاء عناصر مضيف في وقت التشغيل

في مشاريع على مستوى المستند لا يمكن استخدام الأسلوب GetVstoObject لإنشاء عنصر مضيف جديد في وقت التشغيل. يمكنك استخدام هذا الأسلوب فقط للاتصال بعناصر مضيف موجودة تم إنشاؤها في مشروعك في وقت التصميم. لمزيد من المعلومات، راجع القيود البرمجية للعناصر مضيفة وعناصر التحكم.

في مشاريع على مستوى التطبيق، يمكنك استخدام GetVstoObject لإنشاء عناصر مضيف جديدة في وقت التشغيل. لمزيد من المعلومات، راجع توسيع مستندات Word ومصنفات Excel في وظائف إضافية على مستوى التطبيق في وقت التشغيل.

راجع أيضًا:

المرجع

أساليب ملحق (C# البرمجة الدليل)

المبادئ

نظرة عامة حول العناصر المضيفة و عناصر تحكم المضيف

توسيع مستندات Word ومصنفات Excel في وظائف إضافية على مستوى التطبيق في وقت التشغيل

أساليب ملحق (Visual Basic)

موارد أخرى

برمجة تخصيصات علي مستوي مستند