مشاركة عبر


كيفية القيام بما يلي: جعل القيم الحرفية للسلسلة آمنة المنطقة في Excel باستخدام الانعكاس

ينطبق على

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

نوع المشروع

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

  • مشروعات على مستوى التطبيق

إصدار Microsoft Office

  • Excel 2007

  • Excel 2010

في مشاريع Office، يعرض Excel سلاسل بيانات حساسة للإعدادات المحلية بشكل صحيح إذا قمت بتنسيق السلاسل في المشروع الخاص بك كلغة إنجليزية (الولايات المتحدة). يمكنك تغيير هذا السلوك في مشروع Office الذي يستهدف 3.5 .NET Framework بواسطة إعداد Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute إلي false. على الرغم من ذلك، عند تمرير سلسلة القيم الحرفية إلى Excel بعد تغيير هذه السمة، يتم استخدام مؤشر الترابط الحالي LCID تلقائياً و قد يتم تنسيق البيانات بشكل غير صحيح. لمزيد من المعلومات، راجع تنسيق البيانات في Excel بالإعدادات الإقليمية المتعددة.

إذا قمت بتعيين Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute إلى false في مشروع Office الذي يستهدف 3.5 .NET Framework، يمكنك استخدام الانعكاس لفرض استدعاءات معينة إلى الخصائص والأساليب الخاصة بكائنات Excel لاستخدام تنسيق بيانات اللغة الإنجليزية (الولايات المتحدة) (معرف الإعدادات المحلية 1033). عندما تقوم بذلك، يمكنك استخدام تنسيق اللغة الإنجليزية (الولايات المتحدة) على أي من السلاسل التي يتم تمريرها إلى خاصية أو أسلوب، و ستعمل التعليمة البرمجية بشكل صحيح في كافة اللغات.

توضح الأمثلة التالية كيفية تعيين أو الحصول على خاصية من عنصر تحكم NamedRange في مشروع علي مستوى المستند لـ Excel، ولكن نفس المفاهيم أيضاً يتم تطبيقها على كائنات Excel في المشاريع علي مستوى التطبيق.

لتعيين خاصية في نطاق Excel باستخدام الانعكاس

  1. قم بإنشاء أسلوب مساعد يستخدم الأسلوب InvokeMember لتعيين قيمة خاصية خاصة بكائن Excel. قم بتضمين معلمات لكائن Excel و اسم الخاصية و معلمات للخاصية. في الأسلوب المساعد، قم باستخدام التحميل الزائد InvokeMember الذي يحتوي علي المعلمة CultureInfo و مرر معرف اللغة المحلية للغة الإنجليزية (الولايات المتحدة) لهذه المعلمة.

    Shared Function SetPropertyInternational( _
        ByVal target As Object, ByVal name As String, _
        ByVal ParamArray parameters() As Object) As Object
    
        Return target.GetType.InvokeMember(name, _
            Reflection.BindingFlags.Instance Or Reflection.BindingFlags.SetProperty, _
            Nothing, target, parameters, _
            System.Globalization.CultureInfo.GetCultureInfo(1033))
    End Function
    
    static object SetPropertyInternational(object target, string name, params object[] args)
    {
        return target.GetType().InvokeMember(name,
            System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.SetProperty |
            System.Reflection.BindingFlags.Public,
            null, target, args, new
            System.Globalization.CultureInfo(1033));
    }
    
  2. قم بإنشاء عنصر تحكم NamedRange في الخلية A5 و قم بتسميتها NamedRange1.

    Dim NamedRange1 As Microsoft.Office.Tools.Excel.NamedRange = _
        Me.Controls.AddNamedRange(Me.Range("A5"), "NamedRange1")
    
    Microsoft.Office.Tools.Excel.NamedRange NamedRange1 =
        this.Controls.AddNamedRange(this.Range["A5", missing], "NamedRange1");
    
  3. بدلاً من تعيين خاصية Formula الخاصة بـ NamedRange1 مباشرةً، قم باستدعاء الأسلوب المساعد SetPropertyInternational و قم بتمرير الكائن الأساسى Range لعنصر التحكم NamedRange، و اسم الخاصية و القيمة.

    ملاحظة

    لا يمكنك تمرير عنصر التحكم NamedRange مباشرة. بدلاً من ذلك، يجب عليك الحصول على كائن Excel Range باستخدام الخاصية InnerObject ثم قم بتمرير هذا الكائن إلى الأسلوب. لمزيد من المعلومات، راجع القيود البرمجية للعناصر مضيفة وعناصر التحكم.

    SetPropertyInternational(NamedRange1.InnerObject, "Formula", "=SUM(12, 34)")
    
    SetPropertyInternational(NamedRange1.InnerObject, "Formula", "=SUM(12, 34)");
    

لاسترداد قيمة الخاصية من نطاق Excel باستخدام الانعكاس

  1. قم بإنشاء الدالة المساعدة التي تستخدم الأسلوب InvokeMember للحصول على قيمة الخاصية من كائن Excel. الكائن و اسم الخاصية واسم المعلمات الخاصة بالخاصية يتم تمريرهم إلى الأسلوب المساعد.

    Shared Function GetPropertyInternational( _
        ByVal target As Object, ByVal name As String, _
        ByVal ParamArray parameters() As Object) As Object
    
        Return target.GetType.InvokeMember(name, _
            Reflection.BindingFlags.Instance Or Reflection.BindingFlags.GetProperty, _
            Nothing, target, parameters, _
            System.Globalization.CultureInfo.GetCultureInfo(1033))
    End Function
    
    static object GetPropertyInternational(object target, string name, params object[] args)
    {
        return target.GetType().InvokeMember(name,
            System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.GetProperty |
            System.Reflection.BindingFlags.Public,
            null, target, args, new 
            System.Globalization.CultureInfo(1033));
    }
    
  2. قم باستدعاء الوظيفة GetPropertyInternational و بتمرير NamedRange و اسم الخاصية.

    ملاحظة

    يفترض المثال التعليمة البرمجية التالي أن لديك عنصر تحكم NamedRange يسمى NamedRange1 على ورقة العمل.

    Dim formula As String = CType( _
        GetPropertyInternational(NamedRange1.InnerObject, "Formula"), String)
    
    MessageBox.Show(formula)
    
    string formula = (string)
        GetPropertyInternational(NamedRange1.InnerObject, "Formula");
    
    MessageBox.Show(formula);
    

راجع أيضًا:

المهام

كيفية القيام بما يلي: استهداف واجهة مستخدم Office متعددة اللغات

المبادئ

تحميل بشكل حيوي و استخدام أنواع

تنسيق البيانات في Excel بالإعدادات الإقليمية المتعددة

التعميم و الترجمة لحلول Office

موارد أخرى

Deploying Office Solutions

تصميم و إنشاء حلول Office