Me deparei com um bug bem chato no Excel e que até o momento não encontrei uma solução, se encontrar volto aqui para compartilhar.
O que acontece é o seguinte, costumo utilizar o ADO para operações de importação de dados de uma planilha Excel com esse código:
SELECT * INTO TBL_PRECO FROM [Excel 12.0;DATABASE=G:\Projetos 2013\xpto\Novos Precos\6.Preços Finais.xlsx].[PreçosPonderados$K:AB]
Nesse caso estou inserindo todos os dados das coluna K até a AB, selecionando todos os dados. Este código funciona perfeitamente.
Porém mesmo utilizando o ISAM do Excel 12.0, que suporta mais de 1 milhão de linhas, o limite de dados importados é de 65535 linhas.
Você se lembra desse número? Ele era o limite de linhas do Excel até a versão 2003, porém mesmo utilizando um ISAM de uma versão que suporta todas estas linhas, o ADO não consegue identificar todos os dados realizando uma importação parcial dos dados.
UPDATE:
Depois de pedir sugestões aos colegas de trabalho um deles disse que utilizava o DoCmd.TransferSpreadsheet para realizar estas operações no Access, eu normalmente utilizo o Access somente como base de dados, porém esta abordagem funciona perfeitamente neste caso e a solução ficou bem simples.
Sub TransferSheetToAccess(WbName As String, StrName As String, TblName As String) 'Original Code http://officevb.com Dim Acc As Object 'Create Access Instance Set Acc = CreateObject("Access.Application") 'Open DataBase Acc.OpenCurrentDatabase ("P:\\ath\of\myDatabase.accdb") 'import a Workbook WbName into TblName with Headers from StrName range Acc.DoCmd.TransferSpreadsheet 0, 9, TblName, WbName, True, StrName 'Close Acess Application Acc.Quit End SubEsta Sub recebe como parâmetros três strings a primeira contém o nome da Pasta de Trabalho a ser importada, o segundo o Intervalo onde estão os dados e o terceiro o nome da tabela a ser criada no Access.
Valeu Adelson pela ajuda o blog dele você acha também aqui nos sites que indico.
0 comentários:
Postar um comentário