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
-
Verifique se a localidade do computador está definida como um idioma diferente do inglês.Para Windows 2000:
-
No Windows Painel de Controle, clique duas vezes em Opções Regionais.
-
Na guia Geral, selecione um local e clique em OK.
Para Windows XP ou Windows Server 2003:
-
Em Painel de Controle, abra Opções Regionais e de Linguagem.
-
Na guia Opções Regionais , selecione uma localidade e clique em OK.
-
-
Inicie o Microsoft Visual Studio .NET.
-
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.
-
No menu Exibir, clique em Caixa de Ferramentas e adicione um botão ao Form1.
-
Para exibir a janela de código do formulário, clique duas vezes em Botão1.
-
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
-
Adicione a seguinte linha ao início do módulo de código do Form1:
Option Strict Off
-
Pressione F5 para criar e executar o programa.
-
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