ID do artigo: 257819 - Última revisão: sábado, 27 de janeiro de 2007 - Revisão: 4.6

Como usar o ADO com dados do Excel do Visual Basic ou VBA

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sumário

Este artigo descreve o uso de ActiveX Data Objects (ADO) com planilhas do Microsoft Excel como uma fonte de dados. O artigo também destaca problemas de sintaxe e limitações específicas do Excel. Este artigo não aborda OLAP ou usa tecnologias de tabela dinâmica ou outros especializado de dados do Excel.

Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
303814  (http://support.microsoft.com/kb/303814/EN-US/ ) Como usar ADOX com dados do Excel do Visual Basic ou VBA

Mais Informações

INTRODUÇÃO

As linhas e colunas de uma planilha do Microsoft Excel semelhante de perto as linhas e colunas de uma tabela de banco de dados. Desde que os usuários tenha em mente que o Microsoft Excel não é um sistema de gerenciamento de banco de dados relacional e reconhecem as limitações que impõe esse fato, geralmente faz sentido para aproveitar o Excel e suas ferramentas para armazenar e analisar dados.

Microsoft ActiveX Data Objects torna possível tratar de uma pasta de trabalho do Excel como se fosse um banco de dados. Este artigo descreve como fazer isso nas seções a seguir: Observação : O teste para este artigo foi realizado com o Microsoft Data Access Components (MDAC) 2.5 no Microsoft Windows 2000 com o Visual Basic 6.0 Service Pack 3 e Excel 2000. Este artigo não pode confirmar ou Discuta as diferenças no comportamento que podem observar os usuários com diferentes versões do MDAC, o Microsoft Windows, o Visual Basic ou o Excel.

Conectar-se a Excel com o ADO

ADO pode estabelecer conexão com um arquivo de dados Excel com uma das duas OLE DB Providers incluído no MDAC:
  • Microsoft Jet OLE DB Provider - ou -

  • Microsoft OLE DB Provider para drivers ODBC

Como usar o Microsoft Jet OLE DB Provider

O provedor Jet requer apenas duas partes de informação para se conectar a uma fonte de dados do Excel: o caminho, incluindo o nome do arquivo e a versão de arquivo do Excel.

provedor Jet usando uma seqüência de conexão
Dim cn as ADODB.Connection
Set cn = New ADODB.Connection
With cn
	.Provider = "Microsoft.Jet.OLEDB.4.0"
	.ConnectionString = "Data Source=C:\MyFolder\MyWorkbook.xls;" & _
"Extended Properties=Excel 8.0;"
	.Open
End With
				
Versão do provedor : é necessário usar o Jet 4.0 Provider; o Jet 3.51 Provider não suporte a drivers ISAM do Jet. Se você especificar o Jet 3.51 provedor, em tempo de execução você receber a seguinte mensagem de erro:
Não foi possível localizar ISAM instalável.
Versão do Excel : Especifica o Excel 5.0 para uma pasta de trabalho Excel 95 (versão 7.0 do Excel) e o Excel 8.0 para uma planilha Excel 97, Excel 2000 ou Excel 2002 (XP) (versões 8.0, 9.0 e 10.0 do Excel).

provedor Jet usando a caixa de diálogo propriedade do vínculo de dados

Se você usar o controle de dados do ADO ou o ambiente de dados em seu aplicativo, em seguida, a caixa de diálogo Data Link Properties é exibida para reunir as configurações de conexão necessárias.
  1. Na guia provedor , selecione o Jet 4.0 Provider; o Jet 3.51 Provider não oferece suporte aos drivers ISAM do Jet. Se você especificar o Jet 3.51 Provider, em tempo de execução você receber a seguinte mensagem de erro:
    Não foi possível localizar ISAM instalável.
  2. Na guia conexão , navegue até o arquivo de pasta de trabalho. Ignore as entradas "User ID" e "Password", porque eles não se aplicam a uma conexão de Excel. (Você não pode abrir um arquivo do Excel protegidas por senha como uma fonte de dados. Há mais informações sobre esse tópico neste artigo).
  3. Na guia Tudo , selecione Propriedades estendidas na lista e, em seguida, clique em Editar valor . Insira o Excel 8.0; separá-lo de quaisquer outras entradas existentes com um ponto-e-vírgula (;). Se você omitir esta etapa, você receberá uma mensagem de erro quando você testar sua conexão, porque o provedor Jet espera que um banco de dados Microsoft Access, a menos que você especifique o contrário.
  4. Retorne para a guia conexão e clique em Test Connection . Observe que uma caixa de mensagem aparece informando que o processo foi bem-sucedido.
outras configurações de conexão do provedor Jet

títulos de coluna : por padrão, presume que a primeira linha da sua fonte de dados do Excel contém títulos de colunas que podem ser usados como nomes de campo. Se não for esse o caso, você deve ativar essa configuração ou a primeira linha de dados "desaparece" a ser usado como nomes de campo. Isso é feito adicionando o opcional HDR = definindo como as Propriedades estendidas da seqüência de caracteres de conexão. O padrão, que não precisa ser especificado é HDR = Yes . Se você não tem títulos de coluna, você precisará especificar HDR = no ; o provedor de nomes de seus campos F1, F2, etc.. Porque a seqüência de Propriedades estendidas agora contém vários valores, ele deve ficar entre aspas duplas, mais um adicional par de aspas duplas para informar ao Visual Basic para tratar o primeiro conjunto de aspas como valores literais, como no exemplo a seguir (onde espaços extras foram adicionados para maior clareza visual).
.ConnectionString = "Data Source=C:\MyFolder\MyWorkbook.xls;" & _
"Extended Properties=" " Excel 8.0; HDR=No;" " "
				

Usando o Microsoft OLE DB Provider para drivers ODBC

O provedor para drivers ODBC (que este artigo se refere a como "ODBC Provider" para fins de brevidade) também requer somente dois (2) partes de informação para se conectar a uma fonte de dados do Excel: o nome de driver e o caminho da pasta de trabalho e nome de arquivo.

importante : conexão ODBC um para o Excel é somente leitura por padrão. O ADO Recordset LockType configuração da propriedade não substitui essa configuração de nível de conexão. Você deve definir ReadOnly como False em sua configuração de DSN ou a seqüência de conexão se você quiser editar seus dados. Caso contrário, você receber a seguinte mensagem de erro:
A operação deve usar uma consulta atualizável.
provedor ODBC usando uma seqüência de conexão menor DSN
Dim cn as ADODB.Connection
Set cn = New ADODB.Connection
With cn
	.Provider = "MSDASQL"
	.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=C:\MyFolder\MyWorkbook.xls; ReadOnly=False;"
	.Open
End With
				
provedor ODBC usando uma seqüência de conexão com um DSN
Dim cn as ADODB.Connection
Set cn = New ADODB.Connection
With cn
	.Provider = "MSDASQL"
	.ConnectionString = "DSN=MyExcelDSN;"
	.Open
End With
				
provedor ODBC usando a caixa de diálogo propriedade do vínculo de dados

Se você usar o controle de dados do ADO ou o ambiente de dados em seu aplicativo, em seguida, a caixa de diálogo Data Link Properties é exibida para reunir as configurações de conexão necessárias.
  1. Na guia provedor , selecione Microsoft OLE DB Provider para drivers ODBC .
  2. Na guia conexão , selecione o DSN existente que você deseja usar ou escolha Usar seqüência de caracteres de conexão . Isso abre a caixa de diálogo configuração de DSN padrão para reunir as configurações de conexão necessárias. Lembre-se de desmarcar a somente leitura configuração padrão se desejar, como mencionado anteriormente.
  3. Retorne para a guia conexão e clique em Test Connection . Observe que uma caixa de mensagem aparece informando que o processo foi bem-sucedido.
outras configurações de conexão do provedor ODBC

títulos de coluna : por padrão, presume que a primeira linha da sua fonte de dados do Excel contém títulos de colunas, que podem ser usados como nomes de campo. Se não for esse o caso, você deve ativar essa configuração ou a primeira linha de dados "desaparece" a ser usado como nomes de campo. Isso é feito adicionando o opcional FirstRowHasNames = configuração para a seqüência de caracteres de conexão. O padrão, que não precisa ser especificado é FirstRowHasNames = 1 , onde 1 = True . Se você não tem títulos de coluna, você precisará especificar FirstRowHasNames = 0 , onde 0 = False ; o driver de nomes de campos F1, F2 e assim por diante. Esta opção não está disponível na caixa de diálogo Configuração DSN.

No entanto, devido a um erro no driver ODBC, especificando FirstRowHasNames definição atualmente não tem efeito. Em outras palavras, o Excel ODBC driver (MDAC 2.1 ou posterior) sempre tratará a primeira linha na fonte de dados especificado como nomes de campo. Para informationon adicional a coluna bug, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
288343  (http://support.microsoft.com/kb/288343/EN-US/ ) Erro: O driver ODBC do Excel Disregards o FirstRowHasNames ou configuração de cabeçalho
linhas a examinar : o Excel não fornece ADO com informações de esquema detalhadas sobre os dados que ele contém, como faria com um banco de dados relacional. Portanto, o driver deve verificar por meio de pelo menos algumas linhas dos dados existentes para fazer uma estimativa razoável no tipo de dados de cada coluna. O padrão para "Linhas para verificar" é de oito (8) linhas. Você pode especificar um valor inteiro de um (1) para dezesseis (16) linhas, ou você pode especificar zero (0) para verificar todas as linhas existentes. Isso é feito adicionando o opcional MaxScanRows = definir como a seqüência de caracteres de conexão, ou alterando a configuração de linhas a examinar na caixa de diálogo Configuração DSN.

No entanto, devido a um erro no driver ODBC, especificando as linhas para verificar (MaxScanRows) configuração atualmente não tem efeito. Em outras palavras, o driver de ODBC do Excel (MDAC 2.1 ou posterior) sempre verifica as linhas primeiro 8 na fonte de dados especificado para determinar o tipo de dados de cada coluna.

Para obter informações adicionais sobre linhas a verificação de bug, incluindo uma solução simples, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
189897  (http://support.microsoft.com/kb/189897/EN-US/ ) XL97: Dados truncados para 255 caracteres com o driver ODBC do Excel
Outras configurações : se você construir a seqüência de conexão, usando a caixa de diálogo Propriedades de vínculo de dados , você pode observar algumas outras Propriedades estendidas configurações à seqüência de caracteres de conexão que não são absolutamente necessárias, como:
... DefaultDir=C:\WorkbookPath;DriverId=790;FIL=excel 8.0;MaxBufferSize=2048;PageTimeout=5;
				
Mensagem de erro "seqüência de agrupamento" no Editor do Visual Basic

O ambiente de design do Visual Basic com determinadas versões do MDAC, você verá o seguinte tempo de mensagem o primeiro erro que seu programa se conecta a uma fonte de dados do Excel ao tempo de design:
Selecionar o sistema operacional não dá suporte à seqüência de agrupamento.
Esta mensagem aparecerá somente no IDE e não será exibido na versão do programa compilado. Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
246167  (http://support.microsoft.com/kb/246167/EN-US/ ) PROBLEMA: Agrupando seqüência erro inicial ADODB Recordset na primeira vez contra um Excel XLS

Considerações que se aplicam para os provedores do OLE DB

um cuidado sobre tipos mistos de dados

Conforme mencionado anteriormente, ADO deve adivinhar no tipo de dados para cada coluna no intervalo ou planilha do Excel. (Isso não é afetado por célula do Excel configurações de formatação.) Um problema sério pode surgir se você tiver valores numéricos misturados com valores de texto na mesma coluna. O Jet e o provedor ODBC retornam os dados da maioria digite mas retornam nulo (vazio) valores para o tipo de dados de participação minoritária. Se os dois tipos igualmente estão misturados na coluna, o provedor escolhe numérico sobre texto.

Por exemplo:
  • Em oito (8) digitalizadas linhas, se a coluna contiver cinco (5) valores numéricos e três (3) valores de texto, o provedor retorna cinco (5) números e valores nulos três (3).
  • Em oito (8) digitalizadas linhas, se a coluna contém valores numéricos (3) três e cinco (5) valores de texto, o provedor retorna valores nulos (3) três e cinco (5) valores de texto.
  • Em oito (8) digitalizadas linhas, se a coluna contiver quatro (4) valores numéricos e quatro (4) valores de texto, o provedor retorna quatro (4) números e valores nulos quatro (4).
Como resultado, se sua coluna contiver valores mistos, o recurso somente é para armazenar valores numéricos em que a coluna como texto e convertê-los novamente em números quando necessárias no aplicativo cliente, usando a função do Visual Basic VAL ou um equivalente.

Para contornar esse problema para dados somente leitura, habilitar Modo de importação , usando a configuração "IMEX = 1" na seção Propriedades estendidas da seqüência de caracteres de conexão. Isso reforça o ImportMixedTypes = Text configuração do Registro. No entanto, observe que atualizações podem fornecer resultados inesperados nesse modo. Para obter informações adicionais sobre essa configuração, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
194124  (http://support.microsoft.com/kb/194124/EN-US/ ) PROBLEMA: Excel valores retornados como NULL Usando OpenRecordset do DAO
não é possível abrir uma pasta de trabalho protegida por senha

Se a pasta de trabalho do Excel é protegida por uma senha, você não pode abri-lo para o acesso a dados, até mesmo, fornecendo a senha correta com suas configurações de conexão, a menos que o arquivo de pasta de trabalho já aberto no aplicativo Microsoft Excel. Se você tentar, você receber a seguinte mensagem de erro:
Não foi possível descriptografar o arquivo.
Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
211378  (http://support.microsoft.com/kb/211378/EN-US/ ) XL2000: Erro "Não pode descriptografar o arquivo" com senha protegido arquivo

Recuperar e editar dados do Excel com o ADO

Esta seção aborda dois aspectos de trabalhar com o Excel dados:
  • Como selecionar dados - e -

  • Como alterar dados

Como selecionar dados

Há várias maneiras para selecionar dados. Você pode:

  • Selecione os dados do Excel com o código.
  • Selecione os dados do Excel com o controle de dados ADO.
  • Selecione dados do Excel com dados ambiente comandos.

Selecione os dados do Excel com código

Os dados do Excel podem ser contidos na sua pasta de trabalho em um dos seguintes:

  • Uma planilha inteira.
  • Um intervalo nomeado de células em uma planilha.
  • Um intervalo de células em uma planilha sem nome.
Especifica uma planilha

Para especificar uma planilha como sua origem de registro, use o nome da planilha seguido por um sinal de cifrão e entre colchetes. Por exemplo:
	strQuery = "SELECT * FROM [Sheet1$]"
				
você também pode delimitar o nome da planilha com o caractere Inclinado aspa simples (') encontrado no teclado em til (~). Por exemplo:
	strQuery = "SELECT * FROM `Sheet1$`"
				
Microsoft prefere colchetes, que são a convenção de posição para nomes de objeto banco de dados problemático.

Se você omitir o símbolo de cifrão e os colchetes ou apenas o sinal de dólar, você receber a seguinte mensagem de erro:
... o mecanismo de banco de dados Jet não foi possível localizar o objeto especificado
Se você usar o símbolo de cifrão mas omite os colchetes, você verá a seguinte mensagem de erro:
Erro de sintaxe na cláusula FROM.
Se você tentar usar aspas simples comuns, você receber a seguinte mensagem de erro:
Erro de sintaxe na consulta. Cláusula de consulta incompleta.
Especifica um intervalo nomeado

Para especificar um intervalo de células nomeado como sua origem de registro, simplesmente use o nome definido. Por exemplo:
	strQuery = "SELECT * FROM MyRange"
				
especificar um intervalo sem nome

Para especificar um intervalo de células sem nome como sua origem de registro, acrescente notação padrão de linha/coluna do Excel ao final do nome da planilha nos colchetes. Por exemplo:
	strQuery = "SELECT * FROM [Sheet1$A1:B10]"
				
um cuidado sobre como especificar planilhas : O provedor pressupõe que sua tabela de dados começa com a célula superior - esquerdo maioria, - de não-vazios, a maioria na planilha especificada. Em outras palavras, sua tabela de dados pode começar em 3 de linha, coluna C sem um problema. No entanto, você não é possível, por exemplo, digite um título worksheeet acima e à esquerda dos dados na célula A1.

um cuidado sobre como especificar intervalos : quando você especificar uma planilha como sua origem de registro, o provedor adiciona novos registros abaixo registros existentes na planilha como espaço permite. Quando você especificar um intervalo (chamado ou sem nome), Jet também adiciona novos registros abaixo os registros existentes no intervalo permitido espaço. No entanto, se você repetir a consulta no intervalo original, o conjunto de registros resultante não inclui os registros recém-adicionados fora do intervalo.

Com as versões do MDAC anteriores à 2.5, quando você especifica um intervalo nomeado, você não pode adicionar novos registros além dos limites definidos do intervalo ou você recebe a seguinte mensagem de erro:
Não é possível expandir o intervalo nomeado.

Selecione os dados do Excel com o controle de dados ADO

Depois de especificar as configurações de conexão para sua fonte de dados Excel na guia Geral da caixa de diálogo ADODC Propriedades , clique na guia OrigemDoRegistro . Se você escolher um CommandType de adCmdText, você pode inserir uma consulta seleção na caixa de diálogo Texto de comando com a sintaxe descrita anteriormente. Se você escolher um CommandType de adCmdTable e você estiver usando o provedor do Jet, a lista drop-down exibe os intervalos nomeados e nomes de planilha que estão disponíveis na pasta de trabalho selecionada, com intervalos nomeados listados primeiro.

Esta caixa de diálogo corretamente acrescenta o símbolo de cifrão ao nomes de planilha, mas não adiciona os colchetes necessários. Como resultado, se você simplesmente selecionar um nome de planilha e clique em OK , você receber a seguinte mensagem de erro mais tarde:
Erro de sintaxe na cláusula FROM.
Você deve adicionar manualmente os colchetes em torno do nome de planilha. (Esta caixa de combinação permitir a edição.) Se você estiver usando o provedor ODBC, você verá apenas intervalos nomeados listados nesta lista drop-down. No entanto, você pode inserir manualmente um nome de planilha com os delimitadores apropriados.

Selecione os dados do Excel com comandos do ambiente de dados

Depois de configurar a conexão do ambiente de dados para o Excel dados de origem, criar um novo objeto de comando . Se você escolher uma Fonte de dados da Instrução SQL , você pode inserir uma consulta na caixa de texto usando a sintaxe descrita anteriormente. Se você escolher uma Fonte de dados do Objeto de banco de dados , selecione a tabela na primeira lista drop-down, e você estiver usando o provedor do Jet, a lista drop-down exibe intervalos nomeados e nomes de planilha disponível na pasta de trabalho selecionada, com intervalos nomeados listados primeiro. (Se você escolher um nome de planilha nesse local, você não precisará adicionar colchetes em torno do nome de planilha manualmente como faria para o controle de dados ADO.) Se você estiver usando o provedor ODBC, você verá apenas intervalos nomeados listados nesta lista drop-down. No entanto, você pode inserir manualmente um nome de planilha.

Como dados de alteração Excel: Editar, adicionar e excluir

Editar

Você pode editar dados do Excel com os métodos ADO normais. Campos do conjunto de registros que correspondem às células da planilha contendo Excel fórmulas do Excel (começando com "=") são somente leitura e não podem ser editados. Lembre-se que uma conexão ODBC para o Excel é somente leitura por padrão, a menos que você especifique o contrário na suas configurações de conexão. Consulte anteriormente em "usar o Microsoft OLE DB Provider para drivers ODBC".

Adicionar

Você pode adicionar registros à fonte de registro do Excel como espaço permite. No entanto, se você adicionar novos registros fora do intervalo especificado originalmente, esses registros não ficam visíveis se você repetir a consulta na especificação do intervalo original. Consulte anteriormente em "Um cuidado sobre como especificar intervalos."

Em determinadas circunstâncias, quando você utiliza os métodos AddNew e Update do objeto ADO Recordset para inserir novas linhas de dados em uma tabela do Excel, ADO pode inserir os valores de dados para as colunas erradas no Excel. Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
314763  (http://support.microsoft.com/kb/314763/EN-US/ ) CORRECÇÃO: O ADO insere dados em colunas incorreta no Excel
Excluir

Você não tem mais permissão na exclusão de dados do Excel que dados de uma fonte de dados relacionais. Em um banco de dados relacional, "linha" não tem significado ou existência além do "Registro"; em uma planilha do Excel, essa não é true. Você pode excluir valores nos campos (células). No entanto, você não pode:
  1. Excluir um registro inteiro de uma vez ou você recebe a seguinte mensagem de erro:
    Exclusão de dados em uma tabela vinculada não é suportada por este ISAM.
    Você só pode excluir um registro por apagando o conteúdo de cada campo individual.
  2. Exclua o valor em uma célula que contém uma fórmula do Excel ou você recebe a seguinte mensagem de erro:
    Operação não é permitida neste contexto.
  3. Não é possível excluir as linhas de planilha vazia na qual os dados excluídos foram localizados, e seu conjunto de registros continuará exibir registros vazios correspondente para essas linhas vazias.
um cuidado sobre como editar dados do Excel com o ADO : quando você insere dados de texto no Excel com o ADO, o valor de texto é precedido de uma aspa simples. Isso pode causar problemas posteriormente no trabalho com os novos dados.

Recuperar estrutura da fonte de dados (metadados) do Excel

Você pode recuperar dados sobre a estrutura de sua fonte de dados Excel (tabelas e campos) com o ADO. Resultados apresentar ligeiras diferenças entre os dois OLE DB provedores, embora ambos retornar pelo menos o mesmo pequeno número de campos úteis de informações. Esses metadados podem ser recuperados com o método OpenSchema do objeto ADO Connection , que retorna um objeto ADO Recordset . Você também pode usar as extensões de objetos de dados do Microsoft ActiveX mais poderosa para biblioteca Data Definition Language e Security (ADOX) para essa finalidade. No caso de uma fonte de dados do Excel no entanto, onde uma "tabela" é uma planilha ou um intervalo nomeado, e "campo" é um de um número limitado de tipos de dados genéricos, esse poder adicional não é útil.

Informações da tabela de consulta

Dos vários objetos disponíveis em um banco de dados relacional (tabelas, modos de exibição, procedimentos armazenados e assim por diante), uma fonte de dados do Excel expõe apenas tabela equivalentes, consistindo em planilhas e os intervalos nomeados definidos na pasta de trabalho especificada. Intervalos nomeados são tratados como "Tabelas" e planilhas são tratadas como "Tabelas de sistema" e não há muitas informações úteis tabela que você pode recuperar além desta propriedade "table_type". Solicitar uma lista das tabelas disponíveis na pasta de trabalho com o código a seguir:
Set rs = cn.OpenSchema(adSchemaTables)
				
o provedor Jet retorna um conjunto de registros com nove (9) campos, dos quais ele ocupa apenas quatro (4):

  • table_name
  • TABLE_TYPE ("Table" ou "Tabela de sistema")
  • date_created
  • date_modified
A data de dois campos para uma determinada tabela sempre mostram o mesmo valor, que parece ser a "Data da última modificada." Em outras palavras, "date_created" não é confiável.

O provedor ODBC também retorna um conjunto de registros com nove (9) campos, dos quais ele ocupa apenas três (3):

  • table_catalog, a pasta em que a pasta de trabalho está localizada.
  • table_name.
  • TABLE_TYPE, conforme observado anteriormente.
Acordo com a documentação do ADO, é possível recuperar uma lista de planilhas somente, por exemplo, especificando os seguintes critérios adicionais para o método OpenSchema :
Set rs = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "System Table"))
				
Infelizmente, isso não funcionar contra uma fonte de dados Excel com MDAC versões posteriores à 2.0, usando o provedor.

Informações de campo de consulta

Cada campo (coluna) em uma fonte de dados do Excel é um dos tipos de dados seguintes:

  • numérico (tipo de dados ADO 5, adDouble)
  • moeda (tipo de dados ADO 6, adCurrency)
  • lógico ou booleano (tipo de dados ADO 11, adBoolean)
  • Data (tipo de dados ADO 7, adDate, usando o Jet; 135, adDBTimestamp, usando ODBC)
  • texto (um tipo de ad...Char ADO, tal como 202, adVarChar, 200, adVarWChar ou semelhante)
Numeric_precision para uma coluna numérica sempre será retornado como 15 (que é a precisão máxima no Excel); character_maximum_length de uma coluna de texto é sempre retornada como 255 (que é a largura máxima de exibição, mas não o comprimento máximo, do texto em uma coluna do Excel). Não há muitas informações úteis campo que você pode obter além da propriedade data_type . Solicitar uma lista dos campos disponíveis em uma tabela com o código a seguir:
Set rs = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, "TableName", Empty))
				
o provedor Jet retorna um conjunto de registros que contém campos de 28, dos quais ele ocupa oito (8) para campos numéricos e nove (9) para campos de texto. Os campos útil são provavelmente eles:

  • table_name
  • nome_coluna
  • ordinal_position
  • data_type
O provedor ODBC retorna um conjunto de registros contendo 29 campos, dos quais ele ocupa dez (10) para campos numéricos e 11 para campos de texto. Os campos úteis são os mesmos como anteriormente.

Enumerar tabelas e campos e suas propriedades

Código do Visual Basic (como o exemplo a seguir) pode ser usado para enumerar as tabelas e colunas em uma fonte de dados do Excel e campos de informações sobre cada disponíveis. Este exemplo produz os resultados para uma caixa de listagem, Lista1, no mesmo formulário.
Dim cn As ADODB.Connection
Dim rsT As ADODB.Recordset
Dim intTblCnt As Integer, intTblFlds As Integer
Dim strTbl As String
Dim rsC As ADODB.Recordset
Dim intColCnt As Integer, intColFlds As Integer
Dim strCol As String
Dim t As Integer, c As Integer, f As Integer
Set cn = New ADODB.Connection
With cn
	.Provider = "Microsoft.Jet.OLEDB.4.0"
	.ConnectionString = "Data Source=" & App.Path & _
"\ExcelSrc.xls;Extended Properties=Excel 8.0;"
	'.Provider = "MSDASQL"
	'.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=" & App.Path & "\ExcelSrc.xls; "
	.CursorLocation = adUseClient
	.Open
End With
Set rsT = cn.OpenSchema(adSchemaTables)
intTblCnt = rsT.RecordCount
intTblFlds = rsT.Fields.Count
List1.AddItem "Tables:	" & intTblCnt
List1.AddItem "--------------------"
For t = 1 To intTblCnt
	strTbl = rsT.Fields("TABLE_NAME").Value
	List1.AddItem vbTab & "Table #" & t & ":	" & strTbl
	List1.AddItem vbTab & "--------------------"
	For f = 0 To intTblFlds - 1
		List1.AddItem vbTab & rsT.Fields(f).Name & _
vbTab & rsT.Fields(f).Value
	Next
	List1.AddItem "--------------------"
	Set rsC = cn.OpenSchema(adSchemaColumns, Array(Empty, Empty, strTbl, Empty))
	intColCnt = rsC.RecordCount
	intColFlds = rsC.Fields.Count
	For c = 1 To intColCnt
		strCol = rsC.Fields("COLUMN_NAME").Value
		List1.AddItem vbTab & vbTab & "Column #" & c & ": " & strCol
		List1.AddItem vbTab & vbTab & "--------------------"
		For f = 0 To intColFlds - 1
			List1.AddItem vbTab & vbTab & rsC.Fields(f).Name & _
vbTab & rsC.Fields(f).Value
		Next
		List1.AddItem vbTab & vbTab & "--------------------"
		rsC.MoveNext
		Next
		rsC.Close
		List1.AddItem "--------------------"
		rsT.MoveNext
Next
rsT.Close
cn.Close
				

Usar a janela de exibir dados

Se você criar um link de dados para uma fonte de dados do Excel na janela de exibição de dados Visual Basic, a janela de exibição de dados exibe as mesmas informações que você pode recuperar programaticamente conforme descrito anteriormente. Em particular, observe que o provedor Jet lista ambas as planilhas e intervalos em "Tabelas" nomeados, onde o provedor ODBC mostra apenas intervalos nomeados. Se você estiver usando o provedor ODBC e não tiver definido os intervalos nomeados, a lista de "Tabelas" estará vazia.

Limitações do Excel

O uso do Excel como uma fonte de dados vinculado, as limitações internas de planilhas e pastas de trabalho do Excel. Esses incluem, mas não estão limitados a:

  • Tamanho da planilha: 65.536 linhas por 256 colunas
  • Célula conteúdo (texto): 32.767 caracteres
  • Planilhas em uma pasta de trabalho: limitado pela memória disponível
  • Nomes em uma pasta de trabalho: limitado pela memória disponível

Referências

Para obter informações adicionais sobre como usar o ADO.NET para recuperar e modificar registros de uma planilha do Excel com o Visual Basic .NET, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
316934  (http://support.microsoft.com/kb/316934/EN-US/ ) Como usar o ADO.NET para recuperar e modificar registros em uma pasta de trabalho Excel com Visual Basic .NET
Para obter informações adicionais, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
295646  (http://support.microsoft.com/kb/295646/EN-US/ ) Como transferir dados da fonte de dados ADO para o Excel com o ADO
246335  (http://support.microsoft.com/kb/246335/EN-US/ ) Como transferir dados de Recordset do ADO para o Excel com a automação
247412  (http://support.microsoft.com/kb/247412/EN-US/ ) INFO: Métodos para transferir dados para o Excel a partir do Visual Basic
278973  (http://support.microsoft.com/kb/278973/EN-US/ ) EXEMPLO: ExcelADO demonstra como usar ADO para ler e gravar dados em pastas de trabalho do Excel
318373  (http://support.microsoft.com/kb/318373/EN-US/ ) Como recuperar metadados do Excel usando o método GetOleDbSchemaTable no Visual Basic .NET

A informação contida neste artigo aplica-se a:
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 3
  • Microsoft Visual Basic for Applications 6.0
  • Microsoft ActiveX Data Objects 2.1
  • Microsoft ActiveX Data Objects 2.1 Service Pack 1
  • Microsoft ActiveX Data Objects 2.1 Service Pack 2
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.1 Service Pack 1
  • Microsoft Data Access Components 2.1 Service Pack 2
  • Microsoft Data Access Components 2.5
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
Palavras-chave: 
kbmt kbhowto kbiisam KB257819 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 257819  (http://support.microsoft.com/kb/257819/en-us/ )