Cómo: Garantizar la seguridad de los literales de cadena frente a la configuración regional en Excel mediante la reflexión
Actualización: noviembre 2007
Se aplica a |
---|
La información de este tema sólo se aplica a los proyectos y versiones especificados de Visual Studio Tools para Office de Microsoft Office. Tipo de proyecto
Versión de Microsoft Office
Para obtener más información, consulte Características disponibles por aplicación y tipo de proyecto. |
Cuando utilice la configuración de Visual Studio Tools para Office predeterminada, dé siempre a los datos confidenciales de la configuración regional el formato de inglés (Estados Unidos), para que Excel muestre automáticamente los datos con el formato correcto. Si cambia la opción predeterminada estableciendo ExcelLocale1033Attribute en false y pasa literales de cadena a Excel, se utilizará automáticamente el LCID activo del subproceso y los datos podrán tener un formato incorrecto. Para obtener más información, vea Aplicar formato a datos de Excel con varias configuraciones regionales.
Si establece ExcelLocale1033Attribute en false, puede utilizar la reflexión para establecer u obtener una propiedad o invocar un método en el intervalo de destino, pasando una CultureInfo de inglés (Estados Unidos) para que pueda utilizar el nombre en inglés de cualquier cadena y funcione correctamente en todas las configuraciones regionales.
Para establecer una propiedad en un rango de Excel utilizando la reflexión
Cree una función auxiliar llamada SetPropertyInternational para pasar el LCID de inglés (Estados Unidos) cada vez que establezca en rangos de Excel valores de propiedad mediante un literal de cadena.
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)); }
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 a la función SetPropertyInternational y pase el control NamedRange, el nombre de la propiedad y el valor.
Nota: No puede pasar directamente el control NamedRange, debe pasar el objeto Range subyacente llamando al método InnerObject. 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 llamada GetPropertyInternational para establecer el LCID cada vez que recupera los valores de propiedad de rangos de 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)); }
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
Aplicar formato a datos de Excel con varias configuraciones regionales
Globalización y localización de las soluciones de Office
Crear soluciones de Office en Visual Studio