Como utilizar ADO com dados do Excel a partir do Visual Basic ou VBA

Traduções de Artigos Traduções de Artigos
Artigo: 257819 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo descreve a utilização de ActiveX Data Objects (ADO) com folhas de cálculo Microsoft Excel como uma origem de dados. O artigo também realça sintaxe problemas e limitações específicas do Excel. Este artigo não aborda OLAP ou tecnologias de tabela dinâmica ou outros especializado utiliza de dados do Excel.

Para obter informações adicionais, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
303814Como utilizar ADOX com dados do Excel a partir do Visual Basic ou VBA

Mais Informação

INTRODUÇÃO

As linhas e colunas de uma folha de cálculo do Microsoft Excel semelhantes atentamente as linhas e colunas da tabela de base de dados. Desde que os utilizadores não se esqueça de que o Microsoft Excel não é um sistema de gestão da base de dados relacionais e reconhecem as limitações que impõe este facto, muitas vezes, faz sentido para tirar partido do Excel e das respectivas ferramentas para armazenar e analisar dados.

Microsoft ActiveX Data Objects torna possível tratar um livro do Excel como se fosse uma base de dados. Este artigo explica como efectuar este procedimento nas secções seguintes: Nota : O teste para este artigo foi efectuado 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 debater diferenças no comportamento que os utilizadores poderão observar com diferentes versões do MDAC, Microsoft Windows, Visual Basic ou Excel.

Ligar ao Excel com o ADO

ADO pode ligar um ficheiro de dados do Excel com uma das duas OLE DB fornecedores incluídos no MDAC:
  • Fornecedor de OLE DB do Microsoft Jet - ou -

  • Fornecedor Microsoft OLE DB para controladores ODBC

Como utilizar o Microsoft Jet OLE DB Provider

O fornecedor de Jet requer apenas duas informações diferentes para ligar a uma origem de dados do Excel: o caminho, incluindo o nome do ficheiro e a versão de ficheiro do Excel.

fornecedor de Jet utilizar uma cadeia de ligaçã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 fornecedor : é necessário utilizar o Jet 4.0 Provider; Jet 3.51 Provider não suporta controladores ISAM do Jet. Se especificar o Jet 3.51 fornecedor em tempo de execução receber a seguinte mensagem de erro:
Não foi possível localizar um ISAM instalável.
Versão de Excel : Especifique o Excel 5.0 para um livro do Excel 95 (versão 7.0 do Excel) e Excel 8.0 para um livro do Excel 97, Excel 2000 ou Excel 2002 (XP) (versões 10.0 do Excel, 8.0 e 9.0).

fornecedor de Jet utilizando a caixa de diálogo Propriedades de ligação de dados

Se utilizar o controlo de dados ADO ou o ambiente de dados da aplicação, caixa de diálogo de Propriedades de ligação de dados é apresentada para recolher as definições de ligação necessárias.
  1. No separador ' fornecedor ', seleccione o Jet 4.0 Provider; Jet 3.51 Provider não suporta controladores ISAM do Jet. Se especificar o fornecedor de Jet 3.51, durante a execução receberá a seguinte mensagem de erro:
    Não foi possível localizar um ISAM instalável.
  2. No separador ligação , localize o ficheiro do livro. Ignore as entradas "ID de utilizador" e "Palavra-passe", porque estas não se aplicam a uma ligação do Excel. (Não consegue abrir um ficheiro de Excel protegido por palavra-passe como uma origem de dados. Existe mais informações sobre este tópico deste artigo.)
  3. No separador todos , seleccione Propriedades expandidas na lista e, em seguida, clique em Editar valor . Introduza o Excel 8.0; separar das outras entradas existentes com um ponto e vírgula (;). Se omitir este passo, receberá uma mensagem de erro quando testar a ligação, porque o fornecedor de Jet espera uma base de dados do Microsoft Access, a não ser que especifique algo em contrário.
  4. Regresse ao separador ligação e clique em Testar ligação . Note que uma caixa de mensagem aparece a informar que o processo foi bem sucedido.
outras definições de ligação do fornecedor de Jet

cabeçalhos de coluna : por predefinição, é assumido como que a primeira linha da origem de dados de Excel contém cabeçalhos de colunas que podem ser utilizados como nomes de campos. Se não for este o caso, tem de activar esta definição ou a primeira linha de dados "desaparece" para serem utilizados como nomes de campos. Isto é efectuado pelo adicionar opcional HDR = definição para as Propriedades expandidas da cadeia de ligação. A predefinição, não necessita de ser especificado, é HDR = Yes . Se não tiverem cabeçalhos de coluna, tem de especificar HDR = no ; o fornecedor de nomes de campos F1, F2, etc.. Uma vez que a cadeia de Propriedades expandidas agora contém vários valores, tem de estar entre aspas propriamente dito, mais um par de aspas duplas para indicar o Visual Basic para tratar o primeiro conjunto de aspas como valores literais, como no exemplo seguinte (onde espaços adicionais foram adicionados para maior clareza visual) adicional.
.ConnectionString = "Data Source=C:\MyFolder\MyWorkbook.xls;" & _
"Extended Properties=" " Excel 8.0; HDR=No;" " "
				

Utilizar o fornecedor de Microsoft OLE DB para controladores ODBC

O fornecedor de controladores ODBC (que neste artigo, referido como "ODBC Provider" o benefício de brevity) também requer apenas dois (2) partes de informação para ligar a uma origem de dados do Excel: o nome do controlador e o caminho do livro e nome de ficheiro.

importante : ligação de ODBC ao Excel é só de leitura por predefinição. O ADO A definição da propriedade de conjunto de registos LockType não substitui esta definição de nível de ligação. Tem de definir só de leitura para Falso na cadeia da ligação ou a configuração de DSN se pretender editar os dados. Caso contrário, receberá a seguinte mensagem de erro:
Operação tem de utilizar uma consulta actualizável.
fornecedor de ODBC utilizando uma cadeia de ligação DSN menor
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
				
fornecedor de ODBC utilizando uma cadeia de ligação com um DSN
Dim cn as ADODB.Connection
Set cn = New ADODB.Connection
With cn
	.Provider = "MSDASQL"
	.ConnectionString = "DSN=MyExcelDSN;"
	.Open
End With
				
fornecedor de ODBC utilizando a caixa de diálogo Propriedades de ligação de dados

Se utilizar o controlo de dados ADO ou o ambiente de dados da aplicação, caixa de diálogo de Propriedades de ligação de dados é apresentada para recolher as definições de ligação necessárias.
  1. No separador ' fornecedor ', seleccione Microsoft OLE DB Provider para controladores ODBC .
  2. No separador ligação , seleccione o DSN existente que pretende utilizar ou escolher Utilizar cadeia de ligação . Isto apresenta a caixa de diálogo Configuração de DSN padrão para recolher as definições de ligação necessárias. Lembre-se desmarcar a só de leitura predefinição se pretender, tal como mencionado anteriormente.
  3. Regresse ao separador ligação e clique em Testar ligação . Note que uma caixa de mensagem aparece a informar que o processo foi bem sucedido.
outras definições de ligação do fornecedor de ODBC

cabeçalhos de coluna : por predefinição, é assumido como que a primeira linha da origem de dados de Excel contém cabeçalhos de colunas, que podem ser utilizados como nomes de campos. Se não for este o caso, tem de activar esta definição ou a primeira linha de dados "desaparece" para serem utilizados como nomes de campos. Isto é efectuado pelo adicionar opcional FirstRowHasNames = definir para a cadeia de ligação. A predefinição, não necessita de ser especificado, é FirstRowHasNames = 1 , onde 1 = TRUE . Se não tiverem cabeçalhos de coluna, tem de especificar FirstRowHasNames = 0 , onde 0 = FALSE ; o controlador de nomes de campos F1, F2 e por aí em diante. Esta opção não está disponível a caixa de diálogo de configuração de DSN.

No entanto, devido a um erro no controlador de ODBC, especificar FirstRowHasNames definição actualmente não tem efeito. Por outras palavras, o Excel de ODBC (MDAC 2.1 e posterior) do controlador trata sempre na origem de dados especificado primeira linha como nomes de campos. Para informationon adicional do cabeçalho da coluna bugs, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
288343Erro: O controlador ODBC do Excel ignorará FirstRowHasNames de definição de cabeçalho
linhas a pesquisar : Excel não fornece ADO com informações do esquema detalhadas sobre os dados que contém, como uma base de dados relacional. Por conseguinte, o controlador tem pesquisar através de linhas, pelo menos, alguns dos dados existentes para efectuar uma estimativa informadas quando o tipo de dados de cada coluna. A predefinição para "Linhas para verificação" é oito (8) linhas. Pode especificar um valor inteiro de um (1) para dezasseis (16) linhas ou pode especificar zero (0) para verificar se todas as linhas existentes. Isto é efectuado pelo adicionar opcional MaxScanRows = definição para a cadeia de ligação ou alterando a definição de linhas a pesquisar na caixa de diálogo de configuração de DSN.

No entanto, devido a um erro no controlador de ODBC, especificar as linhas para pesquisar (MaxScanRows) definição actualmente não tem efeito. Por outras palavras, o controlador de ODBC do Excel (MDAC 2.1 e posterior) pesquisa sempre as linhas primeiro 8 na origem de dados especificado para determinar o tipo de dados cada coluna.

Para obter informações adicionais sobre as linhas a erro de análise, incluindo uma solução simples, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
189897XL97: Dados truncados para 255 caracteres com o controlador ODBC do Excel
Outras definições : Se criar a cadeia de ligação, utilizando a caixa de diálogo Propriedades de ligação de dados , poderá notar algumas outras Propriedades expandidas definições à cadeia de ligação que não são absolutamente necessários, como, por exemplo,:
... DefaultDir=C:\WorkbookPath;DriverId=790;FIL=excel 8.0;MaxBufferSize=2048;PageTimeout=5;
				
Mensagem de erro "sequência de ordenação" no Editor do Visual Basic

No ambiente de estrutura Visual Basic com determinadas versões do MDAC, poderá ver o tempo de mensagem a primeira erros seguinte que o programa ligar a uma origem de dados do Excel no momento da estruturação:
Seleccionar a sequência de agrupamento não suportada pelo sistema operativo.
Esta mensagem aparece apenas no IDE do e não aparecerão na versão compilada do programa. Para obter informações adicionais, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
246167PROBLEMA: Agrupar sequência erro inicial ADODB Recordset na primeira vez com um Excel XLS

Considerações que aplicar a ambos os fornecedores de base de dados de OLE

uma atenção sobre vários tipos de dados

Como mencionado anteriormente, tem adivinhar ADO no tipo de dados para cada coluna na folha de cálculo do Excel ou intervalo. (Isto não é afectado por definições de formatação de célula de Excel.) Pode surgir um problema grave se tiver valores numéricos mistos com valores de texto na mesma coluna. O fornecedor de ODBC e o Jet devolvem os dados da maioria escreva, mas devolvem valores (vazias) NULL para o tipo de dados minoritária. Se os dois tipos igualmente estão misturados na coluna, o fornecedor escolhe numérico através de texto.

Por exemplo:
  • A oito (8) linhas digitalizada, se a coluna contiver (5) cinco valores numéricos e três (3) valores de texto, o fornecedor devolve números cinco (5) e três (3) valores nulos.
  • A oito (8) linhas digitalizada, se a coluna contiver três (3) valores numéricos e cinco (5) valores de texto, o fornecedor devolve tridimensional (3) valores nulo e valores de texto cinco (5).
  • A oito (8) linhas digitalizada, se a coluna contiver quatro (4) valores numéricos e quatro (4) valores de texto, o fornecedor devolve números quatro (4) e quatro (4) valores nulos.
Como resultado, se a coluna contiver valores mistos, o recourse apenas é armazenar valores numéricos nessa coluna como texto e convertê-los para números quando necessário na aplicação cliente utilizando a função do Visual Basic VAL ou um equivalente.

Para contornar este problema para dados só de leitura, activar o Modo de importação utilizando a definição "IMEX = 1" na secção Propriedades expandidas da cadeia de ligação. Isto força o ImportMixedTypes = texto definição do registo. No entanto, tenha em atenção que as actualizações podem devolver resultados inesperados neste modo. Para obter informações adicionais sobre esta definição, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
194124PROBLEMA: Excel valores apresentados como NULL com OpenRecordset DAO
não é possível abrir um livro protegido por palavra

Se o livro do Excel estiver protegido por palavra-passe, não é possível abri-lo para o acesso a dados, mesmo fornecer a palavra-passe correcta com as definições de ligação, se o ficheiro do livro já estiver aberto na aplicação do Microsoft Excel. Se tentar, receberá a seguinte mensagem de erro:
Não foi possível desencriptar o ficheiro.
Para obter informações adicionais, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
211378XL2000: Erro "Não foi possível desencriptar ficheiros" com palavra-passe protegida ficheiro

Obter e editar dados do Excel com o ADO

Esta secção descreve dois aspectos de trabalhar com o Excel dados:
  • Como seleccionar dados - e -

  • Como alterar dados

Como seleccionar dados

Existem várias formas para seleccionar dados. Pode:

  • Seleccione os dados do Excel com o código.
  • Seleccione os dados do Excel com o controlo de dados de ADO.
  • Seleccione os dados do Excel com dados ambiente comandos.

Seleccione os dados do Excel com o código

Os dados do Excel podem estar contidos no livro dos seguintes procedimentos:

  • Folha de cálculo inteira.
  • Um intervalo de células numa folha de cálculo.
  • Um intervalo sem nome de células numa folha de cálculo.
especificar uma folha de cálculo

Para especificar uma folha de cálculo como a origem de registos, utilize o nome de folha de cálculo seguido por um sinal de dólar e entre parêntesis rectos. Por exemplo:
	strQuery = "SELECT * FROM [Sheet1$]"
				
é também possível delimitem o nome de folha de cálculo com o carácter Inclinado plicas (') encontrado no teclado em til (~). Por exemplo:
	strQuery = "SELECT * FROM `Sheet1$`"
				
Microsoft prefere parêntesis rectos, estando a convenção de posição para nomes de objectos da base de dados problemático.

Se omitir ambos os o cifrão e os parênteses rectos ou apenas o sinal de dólar, receberá a seguinte mensagem de erro:
... o motor de base de dados Jet não conseguiu localizar o objecto especificado
Se utilizar o cifrão mas se omitir os parênteses rectos, verá a seguinte mensagem de erro:
Erro de sintaxe na cláusula FROM.
Se tentar utilizar plicas normais, receberá a seguinte mensagem de erro:
Erro de sintaxe na consulta. Cláusula de consulta incompleta.
especificar um intervalo com nome

Para especificar um intervalo de células como a origem de registos, utilize simplesmente o nome definido. Por exemplo:
	strQuery = "SELECT * FROM MyRange"
				
especificar um intervalo de Unnamed

Para especificar um intervalo de células sem nome como a origem de registos, anexe notação padrão de linha/coluna do Excel para o fim do nome da folha entre parêntesis rectos. Por exemplo:
	strQuery = "SELECT * FROM [Sheet1$A1:B10]"
				
de atenção sobre como especificar folhas de cálculo : O fornecedor assume que a tabela de dados começa com a célula superior - maior, esquerda - do mais, não em branco na folha de cálculo especificada. Por outras palavras, pode começar a tabela de dados na linha 3, coluna C sem problemas. No entanto, por exemplo, não é possível, escreva um título worksheeet acima e à esquerda dos dados na célula A1.

uma atenção sobre como especificar intervalos : quando especificar uma folha de cálculo como a origem de registos, o fornecedor adiciona novos registos abaixo registos existentes na folha de cálculo, tal como espaço permite. Quando especificar um intervalo (com o nome ou sem nome) Jet também adiciona novos registos abaixo os registos existentes no intervalo, tal como espaço permite. No entanto, se repetir a consulta num intervalo original, o conjunto de registos resultante não inclui os registos recentemente adicionados fora do intervalo.

Com as versões do MDAC anteriores à 2.5, quando especificar um intervalo com nome, não é possível adicionar novos registos para além dos limites definidos do intervalo ou receber a seguinte mensagem de erro:
Não é possível expandir o intervalo com nome.

Seleccione os dados do Excel com o controlo de dados ADO

Depois de especificar as definições de ligação para a origem de dados Excel no separador Geral da caixa de diálogo ADODC Propriedades , clique no separador OrigemDosRegistos . Se escolher uma CommandType de adCmdText, pode introduzir uma consulta SELECT na caixa de Texto de comando com a sintaxe descrita anteriormente. Se escolher uma CommandType de adCmdTable e estiver a utilizar o fornecedor de Jet, a lista pendente mostra os intervalos com nome e a nomes de folha de cálculo que estão disponíveis no livro seleccionado, com intervalos com nome listados em primeiro lugar.

Esta caixa de diálogo correctamente acrescenta o cifrão nomes de folha de cálculo, mas não adiciona necessários parêntesis rectos. Como resultado, se basta seleccionar um nome de folha de cálculo e clique em OK , receberá a seguinte mensagem de erro mais tarde:
Erro de sintaxe na cláusula FROM.
Tem de adicionar manualmente os parêntesis rectos à volta do nome de folha de cálculo. (Esta caixa de combinação permitir a edição.) Se estiver a utilizar o fornecedor de ODBC, verá apenas intervalos com nome listados nesta lista pendente. No entanto, pode introduzir manualmente um nome de folha de cálculo com os delimitadores adequados.

Seleccione os dados do Excel com dados ambiente comandos

Depois de configurar a ligação de ambiente de dados para o Excel dados de origem, criar um novo objecto de comando . Se escolher uma Origem de dados de Instrução de SQL , pode introduzir uma consulta na caixa de texto utilizando a sintaxe descrita anteriormente. Se escolher uma Origem de dados do Objecto de base de dados , seleccione a tabela na primeira lista pendente, e estiver a utilizar o fornecedor de Jet, a lista pendente apresenta intervalos com nome e nomes de folha de cálculo disponíveis num livro seleccionado, com intervalos com nome listados em primeiro lugar. (Se optar por um nome de folha de cálculo nesta localização, não é necessário adicionar manualmente o nome de folha de cálculo entre parênteses rectos como faria para o controlo de dados ADO.) Se estiver a utilizar o fornecedor de ODBC, verá apenas intervalos com nome listados nesta lista pendente. No entanto, pode introduzir manualmente um nome de folha de cálculo.

Como dados do Excel alterar: Editar, adicionar e eliminar

Editar

É possível editar dados do Excel com os métodos do ADO normais. Campos do conjunto de registos que correspondem às células da folha de cálculo com Excel fórmulas do Excel (começando com "=") são só de leitura e não podem ser editados. Lembre-se de que uma ligação de ODBC para o Excel é só de leitura por predefinição, salvo indicação em contrário nas definições de ligação. Consulte anteriormente em "utilizar o Microsoft OLE DB Provider para controladores ODBC."

Adicionar

É possível adicionar registos à origem de registos da Excel como espaço permite. No entanto, se adicionar novos registos fora do intervalo que especificou originalmente, estes registos não são visíveis se repetir a consulta na especificação do intervalo original. Ver anterior em "A atenção sobre como especificar intervalos."

Em determinadas circunstâncias, quando utiliza os AddNew e Actualizar métodos do objecto Recordset do ADO para inserir novas linhas de dados numa tabela do Excel, ADO pode inserir os valores de dados de colunas incorrectas no Excel. Para obter informações adicionais, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
314763CORRECÇÃO: O ADO insere dados em colunas incorrecta no Excel
Eliminar

São mais restritos de eliminar dados de Excel de dados de uma origem de dados relacionais. Numa base de dados relacional, "linha" não tem significado ou existência separadamente de "registo"; numa folha de cálculo do Excel, este não é verdadeiro. Pode eliminar os valores nos campos (células). No entanto, não:
  1. Eliminar um registo inteiro simultaneamente ou recebe a seguinte mensagem de erro:
    Eliminar dados numa tabela ligada não é suportado por este ISAM.
    Só é possível eliminar um registo, limpar sem o conteúdo de cada campo individual.
  2. Elimine o valor numa célula que contém uma fórmula do Excel ou recebe a seguinte mensagem de erro:
    Operação não é permitida neste contexto.
  3. Não é possível eliminar das linhas de folha de cálculo vazia na qual os dados eliminados foram localizados e o conjunto de registos vai continuar a apresentar registos vazios correspondente para estas linhas vazias.
uma atenção sobre como editar dados do Excel com o ADO : quando inserir dados de texto no Excel com o ADO, o valor de texto é precedido por aspas simples. Isto pode causar problemas mais tarde em trabalhar com os novos dados.

Obter a estrutura de origem de dados (metadados) a partir do Excel

Pode obter dados sobre a estrutura da origem de dados de Excel (tabelas e campos) com o ADO. Resultados diferem ligeiramente entre as duas OLE DB fornecedores, apesar de ambos, pelo menos, devolvem o número pequeno mesmo dos campos útil das informações. Estes metadados podem ser obtidos com o método OpenSchema do objecto Connection do ADO, que devolve um objecto Recordset do ADO. Também pode utilizar mais potente extensões do Microsoft ActiveX Data Objects para biblioteca de linguagem de definição de dados e Security (ADOX) para esta finalidade. No caso de uma origem de dados do Excel no entanto, em que uma "tabela" é uma folha de cálculo ou um intervalo, e "field" é um de um número limitado de tipos de dados genéricos, esta capacidade adicional não é útil.

Consulta tabela de informações

De vários objectos disponíveis na base de dados relacional (tabelas, vistas, procedimentos armazenados e por aí em diante), uma origem de dados do Excel expõe apenas de equivalentes de tabela, consiste em folhas de cálculo e os intervalos com nome definidos no livro especificado. Intervalos com nome são tratados como "Tabelas" e folhas de cálculo são tratadas como "Tabelas de sistema" e não existe informação muito útil tabela que pode obter para além desta propriedade "table_type". Pedir uma lista das tabelas disponíveis no livro com o seguinte código:
Set rs = cn.OpenSchema(adSchemaTables)
				
o fornecedor de Jet devolve um conjunto de registos com campos de nove (9), que é preenchida apenas quatro (4):

  • TABLE_NAME
  • table_type ("Tabela" ou "Tabela de sistema")
  • date_created
  • date_modified
A data em dois campos para uma determinada tabela sempre mostram o mesmo valor que parece estar a "Data da última modificada." Por outras palavras, "date_created" não é fiável.

O fornecedor de ODBC também devolve um conjunto de registos com campos de nove (9), que é preenchida apenas tridimensional (3):

  • table_catalog, a pasta na qual o livro está localizado.
  • TABLE_NAME.
  • table_type, tal como indicado anteriormente.
Acordo com a documentação do ADO, é possível obter uma lista de folhas de cálculo, 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, esta não funciona com uma origem de dados do Excel com versões posteriores 2.0, utilizando o fornecedor.

Informações sobre o campo de consulta

Cada campo (coluna) numa origem 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 boleano (tipo de dados ADO 11, adBoolean)
  • Data (tipo de dados ADO 7, adDate, utilize o Jet; 135, adDBTimestamp, utilizando ODBC)
  • texto (um tipo de ad...Char ADO, tais como 202, adVarChar, 200, adVarWChar ou semelhante)
Numeric_precision para uma coluna numérica é sempre devolvido como 15 (que é a precisão máxima no Excel); character_maximum_length de uma coluna de texto é sempre devolvido como 255 (que é a largura da visualização máximo, mas não o comprimento máximo, de texto de uma coluna do Excel). Não existe informação muito útil campo que pode obter para além de propriedade data_type . Pedir uma lista dos campos disponíveis numa tabela com o seguinte código:
Set rs = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, "TableName", Empty))
				
o fornecedor de Jet devolve um conjunto de registos que contém campos de 28, que é preenchida oito (8) para campos numéricos e nove (9) para campos de texto. Os campos úteis são provavelmente estes:

  • TABLE_NAME
  • nome_coluna
  • ordinal_position
  • data_type
O fornecedor de ODBC devolve um conjunto de registos contendo campos de 29, que é preenchida dez (10) para campos numéricos e 11 para campos de texto. Os campos úteis são os mesmos como anteriormente.

Enumerar respectiva propriedades de tabelas e campos

Código de Visual Basic (tal como o exemplo que se segue) pode ser utilizado para enumerar as tabelas e colunas de uma origem de dados do Excel e os campos disponíveis de informações sobre cada um. 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
				

Utilizar a janela Vista de dados

Se criar uma ligação de dados a uma origem de dados do Excel na janela Vista de dados do Visual Basic, a janela Vista de dados apresenta as mesmas informações que é possível obter programaticamente conforme descrito anteriormente. Em particular, tenha em atenção que o fornecedor de Jet lista ambas as folhas de cálculo e intervalos com nome em "Tabelas", onde o fornecedor de ODBC mostra apenas intervalos com nome. Se estiver a utilizar o fornecedor de ODBC e não definidos quaisquer intervalos com nome, a lista de "Tabelas" estará vazia.

Limitações do Excel

A utilização do Excel como uma origem de dados é sujeitos a limitações internas do Excel livros e folhas de cálculo. Estas incluem, mas não estão limitadas a:

  • Tamanho de folha de cálculo: 65.536 linhas por 256 colunas
  • Célula conteúdo (texto): 32.767 caracteres
  • Folhas num livro: limitado pela memória disponível
  • Nomes definidos num livro: limitado pela memória disponível

Referências

Para obter informações adicionais sobre como utilizar o ADO.NET para obter e modificar registos num livro do Excel com o Visual Basic. NET, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
316934Como utilizar o ADO.NET para obter e modificar registos de um livro do Excel com o Visual Basic .NET
Para obter informações adicionais, clique nos números de artigo existentes abaixo para visualizar os artigos na Microsoft Knowledge Base:
295646Como transferir dados de origem de dados ADO para o Excel com o ADO
246335Como transferir dados do conjunto de registos ADO para o Excel com a automatização
247412INFO: Métodos para transferir dados para o Excel a partir do Visual Basic
278973EXEMPLO: ExcelADO demonstra como utilizar ADO para ler e escrever dados nos livros do Excel
318373Como obter metadados a partir do Excel utilizando o método GetOleDbSchemaTable no Visual Basic .NET

Propriedades

Artigo: 257819 - Última revisão: 27 de janeiro de 2007 - Revisão: 4.6
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á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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 257819

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com