كيفية القيام بما يلي: جعل القيم الحرفية للسلسلة آمنة المنطقة في Excel باستخدام الانعكاس
ينطبق على |
---|
تنطبق المعلومات الموجودة في هذا الموضوع فقط على أنواع المشاريع وإصدارات Microsoft Office التالية: لمزيد من المعلومات، راجع الميزات المتوفرة بواسطة تطبيقات Office و نوع المشروع. نوع المشروع
إصدار Microsoft Office
|
في مشاريع 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 باستخدام الانعكاس
قم بإنشاء أسلوب مساعد يستخدم الأسلوب 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)); }
قم بإنشاء عنصر تحكم 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");
بدلاً من تعيين خاصية Formula الخاصة بـ NamedRange1 مباشرةً، قم باستدعاء الأسلوب المساعد SetPropertyInternational و قم بتمرير الكائن الأساسى Range لعنصر التحكم NamedRange، و اسم الخاصية و القيمة.
ملاحظة
لا يمكنك تمرير عنصر التحكم NamedRange مباشرة. بدلاً من ذلك، يجب عليك الحصول على كائن Excel Range باستخدام الخاصية InnerObject ثم قم بتمرير هذا الكائن إلى الأسلوب. لمزيد من المعلومات، راجع القيود البرمجية للعناصر مضيفة وعناصر التحكم.
SetPropertyInternational(NamedRange1.InnerObject, "Formula", "=SUM(12, 34)")
SetPropertyInternational(NamedRange1.InnerObject, "Formula", "=SUM(12, 34)");
لاسترداد قيمة الخاصية من نطاق Excel باستخدام الانعكاس
قم بإنشاء الدالة المساعدة التي تستخدم الأسلوب 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)); }
قم باستدعاء الوظيفة 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