Aplicar formato a datos de Excel con varias configuraciones regionales

Debe dar formato a todos los datos con formato sensible a la configuración regional, como fechas y divisa, mediante el formato de datos Inglés (Estados Unidos) (identificador de configuración regional 1033) antes de pasarlos a Microsoft Office Excel o bien leer los datos del código de proyecto de Office.

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.

De forma predeterminada, al desarrollar una solución de Office en Visual Studio, el modelo de objetos de Excel espera el formato de datos correspondiente al identificador de configuración regional 1033 (lo que también se conoce como bloquear el modelo de objetos en el identificador de configuración regional 1033). Este comportamiento coincide con la manera en que funciona Visual Basic para Aplicaciones. Sin embargo, puede modificar este comportamiento en las soluciones de Office.

Descripción de cómo el modelo de objetos de Excel siempre espera el identificador de configuración regional 1033

De forma predeterminada, la configuración regional del usuario final no tiene ningún efecto sobre las soluciones de Office creadas mediante Visual Studio, que siempre se comportan como si la configuración regional fuera Inglés (Estados Unidos). Por ejemplo, si obtiene o establece la propiedad Value2 en Excel, se debe dar formato a los datos como espera el identificador de configuración regional 1033. Si utiliza un formato de datos diferente, podría obtener resultados inesperados.

Aun cuando se utilice el formato de inglés (Estados Unidos) para los datos que se pasan o manipulan mediante código administrado, Excel interpreta y muestra los datos correctamente según la configuración regional del usuario final. Excel puede dar formato a los datos correctamente porque el código administrado pasa el identificador de configuración regional 1033 junto con los datos, lo que indica que el formato de los datos es inglés (Estados Unidos) y, por lo tanto, el formato se debe cambiar para que coincida con la configuración regional del usuario.

Por ejemplo, si los usuarios finales tienen la configuración regional establecida en Alemán (Alemania), esperan que la fecha 29 de junio de 2005 tenga el siguiente formato: 29.06.2005. Sin embargo, si la solución pasa la fecha a Excel como cadena, se debe dar formato a la fecha según el formato Inglés (Estados Unidos): 6/29/2005. Si se da formato a la celda como una celda de fecha, Excel mostrará la fecha en el formato correspondiente a la configuración regional Alemán (Alemania).

Pasar otros identificadores de configuración regional al modelo de objetos de Excel

En los proyectos destinados a .NET Framework 4, Common Language Runtime (CLR) pasa automáticamente el identificador de configuración regional 1033 a todos los métodos y propiedades del modelo de objetos de Excel que aceptan datos sensibles a la configuración regional. No hay ninguna manera de cambiar este comportamiento automáticamente para todas las llamadas en el modelo de objetos. Sin embargo, se puede pasar un identificador de configuración regional diferente a un método concreto si se usa InvokeMember para llamar al método y se pasa el identificador de configuración regional al parámetro culture del método.

En proyectos destinados a .NET Framework 3.5, Motor en tiempo de ejecución de Microsoft Visual Studio Tools para Office pasa el identificador de configuración regional 1033 al modelo de objetos de Excel de forma predeterminada. Sin embargo, puede modificar este comportamiento mediante Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute.

Modificar los proyectos de .NET Framework 3.5 para que usen la configuración regional del equipo del usuario final

Puede desbloquear el comportamiento del identificador de configuración regional para todo el modelo de objetos de Excel en los proyectos de Office destinados a .NET Framework 3.5. Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute controla el comportamiento del modelo de objetos de Excel en estos proyectos. El atributo se establece de forma predeterminada en true, lo que bloquea el modelo de objetos de Excel para esperar el formato del identificador de configuración regional 1033. Cuando este atributo es true, Visual Studio encapsula cada objeto de Excel del que la solución crea instancias en un objeto proxy que siempre pasa el identificador de configuración regional 1033 a Excel. Al establecer el atributo en false, no se utilizan estos objetos proxy y el modelo de objetos de Excel utiliza la configuración regional del usuario final.

Si decide establecer el atributo en false, todavía puede usar la reflexión para hacer que las llamadas que se realicen a las propiedades y métodos de Excel usen el formato de datos de Inglés (Estados Unidos) (identificador de configuración regional 1033). Para obtener más información, vea Cómo: Garantizar la seguridad de los literales de cadena frente a la configuración regional en Excel mediante la reflexión.

Nota

Si establece el atributo en false y algún usuario final tiene una configuración regional que no sea inglés (Estados Unidos), se pueden producir comportamientos inesperados en la solución.

Para desbloquear el modelo de objetos, establezca el atributo Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute del archivo AssemblyInfo.vb o AssemblyInfo.cs de su proyecto en false.

<Assembly: ExcelLocale1033(False)>
[assembly: ExcelLocale1033(false)]

Nota

Dado que Motor en tiempo de ejecución de Microsoft Visual Studio Tools para Office encapsula todos los objetos nativos de Excel en un objeto proxy cuando el valor de Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute es true, es posible que observe una ralentización en determinadas operaciones que incorporan objetos nativos de Excel. En estos casos, puede mejorar el rendimiento utilizando el método Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Unwrap(System.Object) para obtener el objeto de Excel sin el proxy, y, a continuación, realizar la operación con ese objeto. Si lo hace, debe tener en cuenta que este objeto devuelto por Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Unwrap(System.Object) utiliza el identificador de configuración regional del subproceso actual, y no el identificador de configuración regional 1033.

Vea también

Tareas

Cómo: Adaptar soluciones de Office

Cómo: Garantizar la seguridad de los literales de cadena frente a la configuración regional en Excel mediante la reflexión

Conceptos

Extender metadatos mediante atributos

Información general sobre el Motor en tiempo de ejecución de Microsoft Visual Studio Tools para Office

Otros recursos

Diseñar y crear soluciones de Office