ربط لخوادم التنفيذ التلقائي Office باستخدام Visual C#.NET

ملخص

عند تنفيذ تطبيق مثل تطبيق Microsoft Office، يجب أن تكون متصلاً المكالمات إلى الخصائص والأساليب كائنات تطبيق Office بطريقة إلى هذه الكائنات. عادة ما يسمى عملية ربط الخاصية واستدعاءات الأسلوب إلى الكائنات التي تقوم بتطبيق هذه الخصائص واﻷساليب الربط. في Visual C#، ربط المتوفرة نوعان من الربط المبكر و الربط في وقت التشغيل. نوع الربط اختيار يمكن أن تؤثر على جوانب عديدة من البرنامج، بما في ذلك أداء ومرونة والصيانة.

هذا المقال يشرح ويقارن الربط المبكر والمتأخر لعملاء التنفيذ Visual C# ويوفر نماذج التعليمات البرمجية التي توضح كلا النوعين من الربط.

ربط مبكر

مع الربط المبكر، يستخدم Visual C# نوع المعلومات المتوفرة حول تطبيق Office المطلوب الربط مباشرة إلى الأساليب أو الخصائص التي يحتاج إلى استخدامها. يمكن إجراء المحول البرمجي نوع والتحقق من بناء الجملة للتأكد من العدد الصحيح وأنواع المعلمات يتم تمريرها إلى الأسلوب أو الخاصية، وأن القيمة التي تم إرجاعها من النوع المتوقع. لأنه مطلوب عمل أقل في وقت التشغيل لإجراء مكالمة إلى خاصية أو أسلوب, الربط المبكر في بعض الأحيان أسرع؛ ومع ذلك، على الرغم من أنه قد يكون الربط المبكر أسرع، اختلافات الأداء بالمقارنة مع الربط المتأخر غالباً جديرة بالاهتمام.

يكون الربط المبكر عيوب الثانوية أن ذلك يعرض مشكلات التوافق المحتملة للإصدار. على سبيل المثال، افترض أن يقدم ملقم أتمتة مثل Microsoft Excel 2002 أسلوب جديد أو الخاصية غير متوفر في Excel 2000 أو بإجراء تغيير أسلوب أو خاصية موجودة أصلاً. هذه التغييرات قد تبديل تخطيط ثنائي الكائن وتتسبب في حدوث مشاكل في تطبيق Visual C# يستخدم Excel 2002 معلومات النوع لأتمتة Excel 2000. لتجنب هذه المشكلة مع الربط المبكر، من عام المستحسن استخدام معلومات النوع للإصدار الأقدم من تطبيق Office الذي تريد دعم عند تطوير واختبار عميل التنفيذ التلقائي الخاص بك.

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

إنشاء عميل التنفيذ تلقائي استخدام ربط مبكر

  1. Microsoft Visual Studio.NET.بدء تشغيل من القائمة ملف ، انقر فوق جديد ومن ثم انقر فوق المشروع. حدد تطبيق Windows من أنواع مشاريع Visual C#. يتم إنشاء Form1 افتراضياً.
  2. قم بإضافة مرجع إلى مكتبة كائنات Microsoft Excel. للقيام بذلك، اتبع الخطوات التالية:
    1. من القائمة ' مشروع '، انقر فوق إضافة مرجع.
    2. ضمن علامة التبويب " COM "، تحديد موقعمكتبة كائنات Microsoft Excel وانقر فوق تحديد.

      ملاحظة: يتضمن office 2003 "تجميعات التوافق الأساسية" (PIAs). Office XP لا يتضمن تقييمات التنفيذ الأولية، ولكن يمكن تنزيلها.
      للحصول على معلومات إضافية حول Office XP PIAs، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
      328912 Microsoft Office XP تجميعات التوافق الأساسية (PIAs) غير متوفرة للتحميل

    3. انقر فوق "موافق" في مربع الحوار إضافة مراجع لقبول التحديدات. إذا تلقيت موجه لإنشاء wrappers للمكتبات التي قمت بتحديدها، انقر فوق نعم.
  3. من القائمة عرض ، حدد مربع الأدوات لعرض مربع الأدوات، وإضافة زر إلى Form1.
  4. انقر نقراً مزدوجاً فوق Button1. يظهر إطار التعليمات البرمجية للنموذج.
  5. في إطار التعليمات البرمجية، استبدل التعليمة البرمجية التالية
    private void button1_Click(object sender, System.EventArgs e){
    }

    بواسطة:
    private void button1_Click(object sender, System.EventArgs e){
    Excel.Application objApp;
    Excel._Workbook objBook;
    Excel.Workbooks objBooks;
    Excel.Sheets objSheets;
    Excel._Worksheet objSheet;
    Excel.Range range;

    try
    {
    // Instantiate Excel and start a new workbook.
    objApp = new Excel.Application();
    objBooks = objApp.Workbooks;
    objBook = objBooks.Add( Missing.Value );
    objSheets = objBook.Worksheets;
    objSheet = (Excel._Worksheet)objSheets.get_Item(1);

    range = objSheet.get_Range("A1", Missing.Value);

    range.set_Value(Missing.Value, "Hello, World!" );

    //Return control of Excel to the user.
    objApp.Visible = true;
    objApp.UserControl = true;
    }
    catch( Exception theException )
    {
    String errorMessage;
    errorMessage = "Error: ";
    errorMessage = String.Concat( errorMessage, theException.Message );
    errorMessage = String.Concat( errorMessage, " Line: " );
    errorMessage = String.Concat( errorMessage, theException.Source );

    MessageBox.Show( errorMessage, "Error" );
    }
    }

  6. قم بالتمرير إلى الجزء العلوي من إطار التعليمات البرمجية. أضف السطر التالي إلى نهاية قائمة توجيهات باستخدام :
    using System.Reflection;using Excel = Microsoft.Office.Interop.Excel;

ربط في وقت التشغيل

خلافا للربط المبكر، الربط المتأخر ينتظر حتى وقت التشغيل لربط خاصية واسلوب استدعاء للكائنات الخاصة بها. للقيام بذلك، يجب تطبيق الكائن الهدف واجهة COM خاصة: IDispatch. يسمح أسلوب idispatch:: Getidsofnames # Visual C للتحقيق مع كائن حول ما هي الأساليب والخصائص التي يدعمها والأسلوب idispatch:: Invoke يسمح ثم # Visual C لاستدعاء هذه الأساليب والخصائص. ربط في وقت التشغيل على هذا النحو له ميزة إزالة بعض التبعيات الإصدار التي تنطوي عليها مع الربط المبكر. ومع ذلك، له مساوئ إزالة تدقيقات وقت التحويل البرمجي على تكامل التعليمات البرمجية التنفيذ التلقائي، بالإضافة إلى عدم توفير ميزات التحسس الذكي يمكن أن يوفر أدلة لتصحيح استدعاءات إلى أساليب وخصائص.

لاستخدام ربط في وقت التشغيل في Visual C#، استخدم الأسلوب System.Type.InvokeMember . هذا الأسلوب يستدعي idispatch:: Getidsofnames و idispatch:: Invoke لربط أساليب وخصائص خادم التنفيذ التلقائي.

إنشاء عميل التنفيذ تلقائي استخدام ربط في وقت التشغيل

  1. Microsoft Visual Studio.NET.بدء تشغيل من القائمة ملف ، انقر فوق جديد ومن ثم انقر فوق المشروع. حدد تطبيق Windows من أنواع مشاريع Visual C#. يتم إنشاء Form1 افتراضياً.
  2. من القائمة عرض ، حدد مربع الأدوات لعرض مربع الأدوات، وإضافة زر إلى Form1.
  3. انقر نقراً مزدوجاً فوق Button1. يظهر إطار التعليمات البرمجية للنموذج.
  4. في إطار التعليمات البرمجية، استبدل التعليمة البرمجية التالية
    private void button1_Click(object sender, System.EventArgs e){
    }

    بواسطة:
    private void button1_Click(object sender, System.EventArgs e){
    object objApp_Late;
    object objBook_Late;
    object objBooks_Late;
    object objSheets_Late;
    object objSheet_Late;
    object objRange_Late;
    object[] Parameters;

    try
    {
    // Get the class type and instantiate Excel.
    Type objClassType;
    objClassType = Type.GetTypeFromProgID("Excel.Application");
    objApp_Late = Activator.CreateInstance(objClassType);

    //Get the workbooks collection.
    objBooks_Late = objApp_Late.GetType().InvokeMember( "Workbooks",
    BindingFlags.GetProperty, null, objApp_Late, null );

    //Add a new workbook.
    objBook_Late = objBooks_Late.GetType().InvokeMember( "Add",
    BindingFlags.InvokeMethod, null, objBooks_Late, null );

    //Get the worksheets collection.
    objSheets_Late = objBook_Late.GetType().InvokeMember( "Worksheets",
    BindingFlags.GetProperty, null, objBook_Late, null );

    //Get the first worksheet.
    Parameters = new Object[1];
    Parameters[0] = 1;
    objSheet_Late = objSheets_Late.GetType().InvokeMember( "Item",
    BindingFlags.GetProperty, null, objSheets_Late, Parameters );

    //Get a range object that contains cell A1.
    Parameters = new Object[2];
    Parameters[0] = "A1";
    Parameters[1] = Missing.Value;
    objRange_Late = objSheet_Late.GetType().InvokeMember( "Range",
    BindingFlags.GetProperty, null, objSheet_Late, Parameters );

    //Write "Hello, World!" in cell A1.
    Parameters = new Object[1];
    Parameters[0] = "Hello, World!";
    objRange_Late.GetType().InvokeMember( "Value", BindingFlags.SetProperty,
    null, objRange_Late, Parameters );

    //Return control of Excel to the user.
    Parameters = new Object[1];
    Parameters[0] = true;
    objApp_Late.GetType().InvokeMember( "Visible", BindingFlags.SetProperty,
    null, objApp_Late, Parameters );
    objApp_Late.GetType().InvokeMember( "UserControl", BindingFlags.SetProperty,
    null, objApp_Late, Parameters );
    }
    catch( Exception theException )
    {
    String errorMessage;
    errorMessage = "Error: ";
    errorMessage = String.Concat( errorMessage, theException.Message );
    errorMessage = String.Concat( errorMessage, " Line: " );
    errorMessage = String.Concat( errorMessage, theException.Source );

    MessageBox.Show( errorMessage, "Error" );
    }
    }

  5. قم بالتمرير إلى الجزء العلوي من إطار التعليمات البرمجية. أضف السطر التالي إلى نهاية قائمة توجيهات باستخدام :
    using System.Reflection; 

المراجع

لمزيد من المعلومات، قم بزيارة موقع شبكة مطوري Microsoft (MSDN) التالي على الويب:
تطوير Microsoft Office باستخدام Visual Studio
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx
لمزيد من المعلومات حول ربط، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
245115 استخدام الربط المبكر والربط المتأخر في التنفيذ التلقائي

كتابة 244167 عملاء التنفيذ التلقائي لإصدارات متعددة من Office

ربط استخدام DISPID 247579 لأتمتة تطبيقات Office كلما أمكن ذلك

خصائص

رقم الموضوع: 302902 - آخر مراجعة: 18‏/01‏/2017 - المراجعة: 1

تعليقات