Error: "formato antiguo o biblioteca de tipos no válida" error al automatizar Excel

Síntomas

Si se automatiza Microsoft Excel con Microsoft Visual Basic. NET, Microsoft Visual C# .NET o Microsoft Visual C++, puede aparecer el siguiente error al llamar a determinados métodos:
Error: 0 x 80028018 (-2147647512)
Descripción: Formato antiguo o biblioteca de tipos no válida

Causa

Recibes este error llamando a un método de Excel cuando se cumplen las condiciones siguientes:
  • El método requiere un LCID (identificador de configuración regional).
  • Ejecutar una versión en inglés de Excel. Sin embargo, la configuración regional del equipo está configurada para un idioma distinto del inglés.
Si el equipo cliente ejecuta la versión en inglés de Excel y la configuración regional del usuario actual está configurada para un idioma distinto del inglés, Excel intentará localizar el paquete del idioma configurado. Si no se encuentra el paquete de idioma, se informa del error.

Solución alternativa

Para evitar este problema, utilice uno de los métodos siguientes:
  • Instalar el Multilingual User Interface Pack para su versión de Office.
  • Ejecutar el método de Excel o propiedad utilizando InvokeMember para que pueda especificar CultureInfo para la llamada. Por ejemplo, el código siguiente muestra cómo puede invocar el método Add con "en-US" como CultureInfodel objeto Workbooks :
    Dim oApp As New Excel.Application()oApp.Visible = True
    oApp.UserControl = True
    Dim oBooks As Object = oApp.Workbooks
    Dim ci As System.Globalization.CultureInfo = New System.Globalization.CultureInfo("en-US")
    oBooks.GetType().InvokeMember("Add", Reflection.BindingFlags.InvokeMethod, Nothing, oBooks, Nothing, ci)

  • O bien, establecer CultureInfo antes de llamar al método de Excel. Por ejemplo:
    Dim oApp As New Excel.Application()oApp.Visible = True
    oApp.UserControl = True
    Dim oldCI As System.Globalization.CultureInfo = _
    System.Threading.Thread.CurrentThread.CurrentCulture
    System.Threading.Thread.CurrentThread.CurrentCulture = _
    New System.Globalization.CultureInfo("en-US")
    oApp.Workbooks.Add()
    System.Threading.Thread.CurrentThread.CurrentCulture = oldCI
  • Cree un directorio 1033 en Microsoft Office\Office11. A continuación, copie al directorio 1033 excel.exe y cambiar su nombre por xllex.dll.

    Para obtener más información, haga clic en el vínculo siguiente:
    http://blogs.msdn.com/eric_carter/archive/2005/06/15/429515.aspx

Cuando usa una de estas soluciones en un equipo donde la configuración regional no coincida con la versión de idioma actual de Office, debe estar familiarizado con el comportamiento de Excel y cómo Excel interpreta los datos que se pueden dar formato para una configuración regional específica. Para obtener más detalles sobre cómo escribir soluciones de Excel globalizadas con Visual Studio .NET, consulte los siguientes artículos de MSDN:

Crear soluciones de Office para su uso en varios países o regionesProblemas de globalización y localización para soluciones creadas con Microsoft Visual Studio Tools para Microsoft Office System

Estado

Microsoft ha confirmado que se trata de un error de los productos de Microsoft que se enumeran en la sección "Aplicable a".

Más información

Pasos para reproducir el comportamiento

  1. Compruebe que la configuración regional del equipo está establecida en un idioma distinto del inglés.

    Para Windows 2000:
    1. En el Panel de Control de Windows, haga doble clic en Configuración Regional.
    2. En la ficha General , seleccione una ubicación y, a continuación, haga clic en Aceptar.
    Para Windows XP o Windows Server 2003:
    1. En el Panel de Control, abra Configuración Regional e idioma.
    2. En la ficha Opciones regionales , seleccione una configuración regional y, a continuación, haga clic en Aceptar.
  2. Inicie Microsoft Visual Studio. NET.
  3. En el menú archivo, elija nuevo y, a continuación, haga clic en proyecto. En el cuadro de diálogo Nuevo proyecto , en Tipos de proyecto, elija Proyectos de Visual Basic. En Plantillas, haga clic en Aplicación para Windows y, a continuación, haga clic en Confirmar. De forma predeterminada, se crea Form1.
  4. En el menú Ver , haga clic en cuadro de herramientasy, a continuación, agregue un botón a Form1.
  5. Para mostrar la ventana de código para el formulario, haga doble clic en Button1.
  6. En la ventana de código, reemplace el código siguiente
    Private Sub Button1_Click(ByVal sender As System.Object, _                          ByVal e As System.EventArgs) _
    Handles Button1.Click
    End Sub

    con:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click    Dim oApp As Object
    Dim oDoc As Object
    oApp = CreateObject("Excel.Application")
    oApp.Visible = True
    oDoc = oApp.Workbooks.Add
    oDoc.Close()
    oApp.Quit()
    oDoc = Nothing
    oApp = Nothing
    End Sub

  7. Agregue la línea siguiente al principio del módulo de código de Form1 :
    Option Strict Off
  8. Presione F5 para generar y ejecutar el programa.
  9. Para generar el error, haga clic en Button1. El error se produce en la línea que dice:
    oDoc = oApp.Workbooks.Add

Referencias

Para obtener más información sobre la automatización de Office, visite el siguiente sitio Web de desarrollo de Microsoft Office:Además, consulte los siguientes artículos de Microsoft Knowledge Base:
301982 cómo automatizar Microsoft Excel desde Visual Basic .NET

302084 cómo automatizar Microsoft Excel desde Microsoft Visual C#.

Propiedades

Id. de artículo: 320369 - Última revisión: 17 ene. 2017 - Revisión: 2

Comentarios