Aplicar formato a datos de Excel con varias configuraciones regionales

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

  • Proyectos de nivel de documento

Versión de Microsoft Office

  • Excel 2003

  • Excel 2007

Para obtener más información, vea Características disponibles por aplicación y tipo de proyecto.

Debe dar formato a todos los datos con formato sensible a la configuración regional, como fechas y moneda, 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 Visual Studio Tools para Office.

De forma predeterminada, el motor en tiempo de ejecución de Visual Studio Tools para Office hace que el modelo de objetos de Excel espere el formato de datos según el identificador de configuración regional 1033 (esto 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 Visual Studio Tools para Office.

Programar el modelo de objetos de Excel bloqueado

De manera predeterminada, las personalizaciones y complementos en el nivel del documento que cree con Visual Studio Tools para Office no se ven afectadas por la configuración regional del equipo del usuario final y siempre se comportan como si dicha configuración 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 sus opciones de configuración regional establecidas 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 deberá dar formato a la fecha según la configuración para inglés (Estados Unidos): 6/29/2005. Si la celda tiene formato de fecha, Excel mostrará la fecha con el formato para alemán (Alemania).

Desbloquear el modelo de objetos de Excel

Visual Studio Tools para Office permite desbloquear el comportamiento del identificador de configuración regional para el modelo de objetos completo de Excel. El atributo ExcelLocale1033Attribute controla el comportamiento del modelo de objetos de Excel de la solución de Visual Studio Tools para Office. 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 Tools para Office ajusta 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.

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. Se puede escribir el código para que funcione en cualquier configuración regional. 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.

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

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

Dado que el motor en tiempo de ejecución de Visual Studio Tools para Office incluye todos los objetos nativos de Excel en un objeto proxy cuando el valor de 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 Unwrap 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 Unwrap utiliza el identificador de configuración regional del subproceso actual, y no el identificador de configuración regional 1033.

Desbloquear objetos de Excel concretos en proyectos de Excel 2003

Si está desarrollando las soluciones para Excel 2003, hay algunos casos en los que necesita modificar un objeto de Excel nativo (es decir, una instancia de una clase que se define en el espacio de nombres Microsoft.Office.Interop.Excel) para que utilice el identificador de configuración regional del subproceso actual, en lugar del identificador de configuración regional 1033. Por ejemplo, debe hacer esto si desea pasar null como un parámetro out de un método que pertenece a un objeto de Excel.

Para cambiar el comportamiento del identificador de configuración regional para los objetos de Excel concretos en proyectos Excel 2003, utilice métodos de la clase ExcelLocale1033Proxy. Llame al método Unwrap para modificar un objeto de Excel de forma que utilice el identificador de configuración regional 1033 en lugar del correspondiente al subproceso actual.

Después de llamar a Unwrap para modificar un objeto de Excel, quizás desee volver a utilizar el objeto pero con el identificador de configuración regional 1033 en lugar del identificador de configuración regional del actual subproceso. Llame al método Wrap para encapsular el objeto de Excel en un objeto proxy que use el identificador de configuración regional 1033 en lugar del identificador de configuración regional del subproceso actual.

Nota:

Los métodos Wrap y Unwrap están obsoletos en proyectos de Visual Studio Tools para Office para Excel 2007. El motor en tiempo de ejecución de Visual Studio Tools para Office que se utiliza con proyectos de Excel 2007 contiene mejoras que hacen que los objetos de Excel nativos funcionen como se espera cuando ExcelLocale1033Attribute es true. Para obtener más información acerca del motor en tiempo de ejecución de Visual Studio Tools para Office, vea Información general sobre el motor en tiempo de ejecución de Microsoft Visual Studio Tools para Office.

Llamar a métodos que tienen parámetros out mientras el modelo de objetos de Excel está bloqueado

Si ExcelLocale1033Attribute es true en una solución de Excel 2003, recibirá una excepción si pasa null como un parámetro out de un método en el modelo de objetos de Excel. Para pasar null como un parámetro out, debe llamar a Unwrap y pasar el objeto que contiene el método antes de llamar al método.

Opcionalmente, puede asignar el parámetro a un valor antes de llamar al método. Para obtener más información acerca de los parámetros out, vea out (Referencia de C#).

Por ejemplo, el código siguiente genera una excepción si ExcelLocale1033Attribute es true. El método ExportXml posee un parámetro out.

Dim outString As String = Nothing
Dim result As Excel.XlXmlExportResult = _
    Globals.ThisWorkbook.XmlMaps(1).ExportXml(outString)
string outString = null;
Excel.XlXmlExportResult expResult =
Globals.ThisWorkbook.XmlMaps[1].ExportXml(out outString);

Para resolver este problema, puede pasar XmlMap en el método Unwrap antes de llamar a ExportXml.

Dim outString As String = Nothing
Dim map As Excel.XmlMap = TryCast( _
    Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Unwrap( _
    Globals.ThisWorkbook.XmlMaps(1)), Excel.XmlMap)
Dim result As Excel.XlXmlExportResult = map.ExportXml(outString)
string outString = null;
Excel.XmlMap map = Microsoft.Office.Tools.Excel.
    ExcelLocale1033Proxy.Unwrap(
    Globals.ThisWorkbook.XmlMaps[1]) as Excel.XmlMap;
Excel.XlXmlExportResult expResult = map.ExportXml(out outString);

Opcionalmente, puede asignar la variable outString a un valor antes de pasarlo a ExportXml.

Dim outString As String = String.Empty
Dim result As Excel.XlXmlExportResult = _
    Globals.ThisWorkbook.XmlMaps(1).ExportXml(outString)
string outString = String.Empty;
Excel.XlXmlExportResult expResult =
    Globals.ThisWorkbook.XmlMaps[1].ExportXml(out outString);

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

Crear soluciones de Office en Visual Studio

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

Referencia

ExcelLocale1033Attribute

ExcelLocale1033Proxy

Otros recursos

Extender metadatos mediante atributos