Artigo: 257819 - Última revisão: sábado, 27 de Janeiro de 2007 - Revisão: 4.6 Como utilizar ADO com dados do Excel a partir do Visual Basic ou VBA
Nesta páginaSumárioEste 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: 303814
(http://support.microsoft.com/kb/303814/EN-US/
)
Como utilizar ADOX com dados do Excel a partir do Visual Basic ou VBA Mais InformaçãoINTRODUÇÃOAs 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:
Ligar ao Excel com o ADOADO pode ligar um ficheiro de dados do Excel com uma das duas OLE DB fornecedores incluídos no MDAC:
Como utilizar o Microsoft Jet OLE DB ProviderO 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 Não foi possível localizar um ISAM instalável. 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.
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. Utilizar o fornecedor de Microsoft OLE DB para controladores ODBCO 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. 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.
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: 288343
(http://support.microsoft.com/kb/288343/EN-US/
)
Erro: 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: 189897
(http://support.microsoft.com/kb/189897/EN-US/
)
XL97: 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,: 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. 246167
(http://support.microsoft.com/kb/246167/EN-US/
)
PROBLEMA: 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 OLEuma atenção sobre vários tipos de dadosComo 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:
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: 194124
(http://support.microsoft.com/kb/194124/EN-US/
)
PROBLEMA: 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. 211378
(http://support.microsoft.com/kb/211378/EN-US/
)
XL2000: Erro "Não foi possível desencriptar ficheiros" com palavra-passe protegida ficheiro Obter e editar dados do Excel com o ADOEsta secção descreve dois aspectos de trabalhar com o Excel dados:
Como seleccionar dadosExistem várias formas para seleccionar dados. Pode:
Seleccione os dados do Excel com o códigoOs dados do Excel podem estar contidos no livro dos seguintes procedimentos:
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: 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 Erro de sintaxe na cláusula FROM. Erro de sintaxe na consulta. Cláusula de consulta incompleta. Para especificar um intervalo de células como a origem de registos, utilize simplesmente o nome definido. Por exemplo: 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: 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 ADODepois 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. Seleccione os dados do Excel com dados ambiente comandosDepois 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 eliminarEditarÉ 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: 314763
(http://support.microsoft.com/kb/314763/EN-US/
)
CORRECÇÃ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:
Obter a estrutura de origem de dados (metadados) a partir do ExcelPode 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çõesDe 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:
O fornecedor de ODBC também devolve um conjunto de registos com campos de nove (9), que é preenchida apenas tridimensional (3):
Informações sobre o campo de consultaCada campo (coluna) numa origem de dados do Excel é um dos tipos de dados seguintes:
Enumerar respectiva propriedades de tabelas e camposCó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.Utilizar a janela Vista de dadosSe 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 ExcelA 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:
ReferênciasPara 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: 316934
(http://support.microsoft.com/kb/316934/EN-US/
)
Como 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: 295646
(http://support.microsoft.com/kb/295646/EN-US/
)
Como transferir dados de origem de dados ADO para o Excel com o ADO 246335
(http://support.microsoft.com/kb/246335/EN-US/
)
Como transferir dados do conjunto de registos ADO para o Excel com a automatizaçã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 utilizar ADO para ler e escrever dados nos livros do Excel 318373
(http://support.microsoft.com/kb/318373/EN-US/
)
Como obter metadados a partir do Excel utilizando o método GetOleDbSchemaTable no Visual Basic .NET A informação contida neste artigo aplica-se a:
Tradução automáticaIMPORTANTE: 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
(http://support.microsoft.com/kb/257819/en-us/
)
| Outros Recursos Outros Sites de Suporte
ComunidadesObtenha Ajuda AgoraTraduções de Artigos
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Voltar ao topo