Sintomas

Se você automatizar o Microsoft Excel com o Microsoft Visual Basic .NET, o Microsoft Visual C# .NET ou Microsoft Visual C++, poderá receber o seguinte erro ao chamar determinados métodos:

Erro: 0x80028018 (-2147647512)Descrição: Formato antigo ou Biblioteca de Tipos Inválidos

Causa

Você recebe esse erro chamando um método do Excel quando as seguintes condições forem verdadeiras:

  • O método requer um LCID (identificador de localidade).

  • Você executa uma versão em inglês do Excel. No entanto, as configurações regionais para o computador são configuradas para um idioma que não é inglês.

Se o computador cliente executar a versão em inglês do Excel e a localidade do usuário atual estiver configurada para um idioma diferente do inglês, o Excel tentará localizar o pacote de idiomas para o idioma configurado. Se o pacote de idiomas não for encontrado, o erro será relatado.

Solução alternativa

Para resolver esse problema, você pode usar um dos seguintes métodos:

  • Instale o Pacote de Interface do Usuário Multilíngue para sua versão do Office.

  • Execute o método ou propriedade do Excel usando InvokeMember para que você possa especificar o CultureInfo para a chamada. Por exemplo, o código a seguir ilustra como você pode invocar o método Adicionar objeto Workbooks com "en-US" como o CultureInfo:

    Dim oApp As New Excel.Application()oApp.Visible = TrueoApp.UserControl = TrueDim oBooks As Object = oApp.WorkbooksDim ci As System.Globalization.CultureInfo = New System.Globalization.CultureInfo("en-US")oBooks.GetType().InvokeMember("Add", Reflection.BindingFlags.InvokeMethod, Nothing, oBooks, Nothing, ci)
  • Ou defina o CultureInfo antes de chamar o método excel. Por exemplo:

    Dim oApp As New Excel.Application()oApp.Visible = TrueoApp.UserControl = TrueDim oldCI As System.Globalization.CultureInfo = _    System.Threading.Thread.CurrentThread.CurrentCultureSystem.Threading.Thread.CurrentThread.CurrentCulture = _    New System.Globalization.CultureInfo("en-US")oApp.Workbooks.Add()System.Threading.Thread.CurrentThread.CurrentCulture = oldCI
  • Crie um diretório 1033 no Microsoft Office\Office11. Em seguida, copie excel.exe para o diretório 1033 e renomeie-o como xllex.dll. Para obter mais informações, clique no seguinte link:http://blogs.msdn.com/eric_carter/archive/2005/06/15/429515.aspx

Quando você usa uma dessas soluções alternativas para um computador em que as configurações regionais não correspondem à versão de linguagem atual do Office, você deve estar familiarizado com como o Excel se comporta e como o Excel interpretará dados que podem ser formatados para uma localidade específica. Para obter mais detalhes sobre como escrever soluções globalizadas do Excel com o Visual Studio .NET, confira os seguintes artigos no MSDN:Criando soluções do Office para uso em vários países/regiões

http://msdn2.microsoft.com/en-us/library/aa168494(office.11).aspxProblemas de globalização e localização para soluções criadas com Microsoft Visual Studio Tools for the Microsoft Office System

http://msdn2.microsoft.com/en-us/library/aa192494(office.11).aspx

Status

A Microsoft confirmou que esse é um bug nos produtos da Microsoft listados na seção "Aplica-se a".

Informações adicionais

Etapas para reproduzir o comportamento

  1. Verifique se a localidade do computador está definida como um idioma diferente do inglês.Para Windows 2000:

    1. No Windows Painel de Controle, clique duas vezes em Opções Regionais.

    2. Na guia Geral, selecione um local e clique em OK.

    Para Windows XP ou Windows Server 2003:

    1. Em Painel de Controle, abra Opções Regionais e de Linguagem.

    2. Na guia Opções Regionais , selecione uma localidade e clique em OK.

  2. Inicie o Microsoft Visual Studio .NET.

  3. No menu Arquivo, aponte para Novo e clique em Projeto. Na caixa de diálogo Novo Projeto, em Tipos de Projeto, clique em Projetos do Visual Basic. Em Modelos, clique em Aplicativo windows e clique em OK. Por padrão, o Form1 é criado.

  4. No menu Exibir, clique em Caixa de Ferramentas e adicione um botão ao Form1.

  5. Para exibir a janela de código do formulário, clique duas vezes em Botão1.

  6. Na janela de código, substitua o código a seguir

    Private Sub Button1_Click(ByVal sender As System.Object, _                          ByVal e As System.EventArgs) _                          Handles Button1.ClickEnd Sub

    Com:

    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 = NothingEnd Sub
  7. Adicione a seguinte linha ao início do módulo de código do Form1:

    Option Strict Off
  8. Pressione F5 para criar e executar o programa.

  9. Para gerar o erro, clique em Botão1. O erro ocorre na linha que diz:

    oDoc = oApp.Workbooks.Add

Referências

Para obter mais informações sobre a Automação do Office, visite o seguinte site do Microsoft Office Development:

http://support.microsoft.com/ofd Além disso, confira os seguintes artigos da Base de Dados de Conhecimento da Microsoft:

301982 Como automatizar o Microsoft Excel no Visual Basic .NET

302084 Como automatizar o Microsoft Excel do Microsoft Visual C# .NET

Precisa de mais ajuda?

Quer mais opções

Explore os benefícios da assinatura, procure cursos de treinamento, saiba como proteger seu dispositivo e muito mais.