Select the product you need help with
Como transferir dados de um Conjunto de Registos ADO para o Excel com automatizaçãoArtigo: 246335 - Ver produtos para os quais este artigo se aplica. Nesta páginaSumário É possível transferir o conteúdo de um conjunto de dados ADO para uma folha de cálculo do Microsoft Excel automatizando o Excel. A abordagem que poderá utilizar depende da versão do Excel que está a automatizar. O Excel 97, o Excel 2000 e o Excel 2002 têm um método CopyFromRecordset que pode ser utilizado para transferir um conjunto de registos para um intervalo. No Excel 2000 e 2002, CopyFromRecordset pode ser utilizado para copiar um conjunto de registos DAO ou ADO. No entanto, no Excel 97, CopyFromRecordset só suporta conjuntos de registos DAO. Para transferir um conjunto de registos ADO para o Excel 97, pode criar uma matriz a partir do conjunto de registos e, em seguida, povoar o intervalo com o conteúdo dessa matriz. Este artigo explica ambas as abordagens. O código de exemplo apresentado ilustra como pode transferir um conjunto de registos ADO para o Excel 97, Excel 2000, Excel 2002, Excel 2003 ou Excel 2007. Mais Informação O código de exemplo fornecido abaixo mostra como copiar um conjunto de registos ADO para uma folha de cálculo do Microsoft Excel utilizando a automatização a partir do Microsoft Visual Basic. Em primeiro lugar, o código verifica a versão do Excel. Se for detectado o Excel 2000 ou 2002, é utilizado o método CopyFromRecordset porque é eficiente e necessita de menos código. No entanto, se for detectado o Excel 97 ou uma versão anterior, o conjunto de registos é copiado primeiro para uma matriz, utilizando o método GetRows do objecto de conjunto de registos ADO. Em seguida, a matriz é transposta de modo a que os registos fiquem na primeira dimensão (em linhas) e os campos fiquem na segunda dimensão (em colunas). Depois disso, a matriz é copiada para uma folha de cálculo do Excel através da respectiva atribuição a um intervalo de células. (A matriz é copiada num passo, em vez de ser efectuado um ciclo por cada célula existente na folha de cálculo.) O código de exemplo utiliza a base de dados de exemplo Adamastor, incluída com o Microsoft Office. Se tiver seleccionado a pasta predefinida quando instalou o Microsoft Office, a base de dados está localizada em: \Programas\Microsoft Office\Office\Samples\Adamastor.mdb Se a base de dados Adamastor estiver localizada noutra pasta do computador, terá de editar o caminho da base de dados existente no código fornecido abaixo. Se não tiver a base de dados Adamastor instalada no sistema, poderá utilizar a opção Adicionar/Remover da configuração do Microsoft Office para instalar as bases de dados de exemplo. Nota A base de dados Adamastor não é instalada durante a instalação do Microsoft Office de 2007. Para obter a base de dados Adamastor 2007, visite o seguinte Web site da Microsoft: http://office.microsoft.com/pt-pt/templates/TC012289972070.aspx
(http://office.microsoft.com/pt-pt/templates/TC012289972070.aspx)
Passos para Criar o Exemplo
Para uma maior eficiência e um melhor desempenho, CopyFromRecordset é o método preferido. Visto que o Excel 97 só suporta conjuntos de registos DAO com CopyFromRecordset, se tentar passar um conjunto de registos ADO para CopyFromRecordset com o Excel 97, receberá o erro seguinte: Erro durante a execução 430: A classe não suporta Automatização ou não suporta a interface esperada. Nota Quando utilizar CopyFromRecordset, deverá estar ciente de que o conjunto de registos ADO ou DAO que utilizar não pode conter campos de objectos OLE ou de dados de matriz, tais como conjuntos de registos hierárquicos. Se incluir campos de qualquer um dos tipos num conjunto de registos, o método CopyFromRecordset falha com o seguinte erro: Erro durante a execução -2147467259: O método CopyFromRecordset do objecto Range falhou. Se o Excel 97 for detectado, utilize o método GetRows do conjunto de registos ADO para copiar o conjunto de registos para uma matriz. Se atribuir a matriz devolvida por GetRows a um intervalo de células na folha de cálculo, os dados são distribuídos pelas colunas e não pelas linhas. Por exemplo, se o conjunto de registos tiver dois campos e 10 linhas, a matriz aparecerá como duas linhas e 10 colunas. Consequentemente, necessita de transpor a matriz utilizando a função TransposeDim() antes de atribuir a matriz ao intervalo de células. Quando atribuir uma matriz a um intervalo de células, deverá estar ciente de algumas limitações: As limitações seguintes aplicam-se quando atribuir uma matriz a um objecto de Intervalo do Excel:
Erro Durante a Execução 13: Tipo Incompatível
Erro Durante a Execução 5: Chamada de procedimento ou argumento inválido. Erro Durante a Execução 1004: Erro definido pela aplicação ou definido pelo objecto Referências
Para obter informações adicionais sobre as limitações da passagem de matrizes para as várias versões do Excel, clique no número de artigo que se segue para visualizar o artigo na Base de Dados de Conhecimento Microsoft:
177991 Para obter informações adicionais, clique nos números de artigo existentes abaixo para visualizar os artigos na Base de Dados de Conhecimento Microsoft:
(http://support.microsoft.com/kb/177991/
)
XL: Limitações da Transferência de Matrizes para o Excel Utilizando Automatização
146406
(http://support.microsoft.com/kb/146406/
)
XL: Como Obter uma Tabela do Access para o Excel Utilizando DAO
215965
(http://support.microsoft.com/kb/215965/
)
XL2000: 12:00:00 Apresentado para Datas Anteriores a 1900
243394
(http://support.microsoft.com/kb/243394/
)
Como Utilizar MFC para Copiar um Conjunto de Registos DAO para o Excel com Automatização
247412
(http://support.microsoft.com/kb/247412/
)
Métodos para Transferir Dados para o Excel a partir do Visual Basic
PropriedadesArtigo: 246335 - Última revisão: terça-feira, 25 de Março de 2008 - Revisão: 5.0 A informação contida neste artigo aplica-se a:
| Traduções de Artigos
|


Voltar ao topo








