Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En los proyectos de Office, Excel muestra las cadenas de datos sensibles a la configuración regional correctamente si las cadenas del proyecto están en el formato Inglés (Estados Unidos). Puede cambiar este comportamiento en un proyecto de Office destinado a .NET Framework 3.5 estableciendo Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute en false. Sin embargo, cuando se pasan literales de cadena a Excel después de cambiar este atributo, se usa automáticamente el LCID activo del subproceso y los datos podrían tener un formato incorrecto. Para obtener más información, vea Aplicar formato a datos de Excel con varias configuraciones regionales.
Se aplica a: la información de este tema se aplica a los proyectos de nivel de documento y los proyectos de nivel de aplicación para Excel 2007 y Excel 2010. Para obtener más información, vea Características disponibles por aplicación y tipo de proyecto de Office.
Si establece Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute en false en un proyecto de Office destinado a .NET Framework 3.5, puede usar la reflexión para hacer que las llamadas concretas a propiedades y métodos de objetos de Excel usen el formato de datos Inglés (Estados Unidos) (identificador de configuración regional 1033). Al hacer esto, puede usar el formato Inglés (Estados Unidos) para cualquier cadena que se pase a la propiedad o método, y el código funcionará correctamente en todas las configuraciones regionales.
En los siguientes ejemplos se muestra cómo establecer u obtener una propiedad de un control NamedRange en un proyecto de nivel de documento para Excel, pero los mismos conceptos también se aplican a los objetos de Excel en proyectos de nivel de aplicación.
Para establecer una propiedad en un rango de Excel utilizando la reflexión
Cree un método auxiliar que use el método InvokeMember para establecer un valor de propiedad de un objeto de Excel. Incluya los parámetros del objeto de Excel, el nombre de la propiedad y los parámetros de la propiedad. En el método auxiliar, use una sobrecarga InvokeMember que tenga un parámetro CultureInfo y pase el identificador de configuración regional de Inglés (Estados Unidos) a este parámetro.
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 Functionstatic 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)); }Cree un control NamedRange en la celda A5 y denomínelo 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");En lugar de establecer la propiedad Formula de NamedRange1 directamente, llame al método auxiliar SetPropertyInternational y pase el objeto Range subyacente del control NamedRange, el nombre de la propiedad y el valor.
Nota
No puede pasar el control NamedRange directamente. En su lugar, debe obtener el objeto Range subyacente de Excel mediante la propiedad InnerObject y, a continuación, pasar este objeto al método. Para obtener más información, vea Limitaciones de programación de elementos y controles Host.
SetPropertyInternational(NamedRange1.InnerObject, "Formula", "=SUM(12, 34)")SetPropertyInternational(NamedRange1.InnerObject, "Formula", "=SUM(12, 34)");
Para recuperar un valor de propiedad de un rango de Excel utilizando la reflexión
Cree una función auxiliar que use el método InvokeMember para obtener un valor de propiedad de un objeto de Excel. El objeto, el nombre de la propiedad y los parámetros de la propiedad se pasan al método auxiliar.
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 Functionstatic 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)); }Llame a la función GetPropertyInternational y pase el control NamedRange y el nombre de la propiedad.
Nota
El ejemplo de código siguiente supone que tiene un control NamedRange denominado NamedRange1 en la hoja de cálculo.
Dim formula As String = CType( _ GetPropertyInternational(NamedRange1.InnerObject, "Formula"), String) MessageBox.Show(formula)string formula = (string) GetPropertyInternational(NamedRange1.InnerObject, "Formula"); MessageBox.Show(formula);
Vea también
Tareas
Cómo: Apuntar a MUI (Multilingual User Interface, Interfaz de usuario multilingüe) de Office
Conceptos
Cargar y utilizar tipos dinámicamente
Aplicar formato a datos de Excel con varias configuraciones regionales
Globalización y localización de las soluciones de Office