Importe um grande número de arquivos .csv para o Access

0

Todos os arquivos CSV estão todos no mesmo formato. Eu quero que cada arquivo CSV esteja em sua própria tabela, com o nome da tabela sendo o mesmo que o nome do arquivo.

Como posso fazer isso?

    
por soandos 10.01.2014 / 21:51

2 respostas

2

Eu estou retribuindo à comunidade depois de perder quatro horas do meu tempo resolvendo um problema específico, mas respondendo à sua pergunta ao mesmo tempo. Todos os outros códigos foram reunidos de outros recursos. Esse código usará a função transfertext para extrair vários csv de um diretório em suas próprias tabelas separadas com o FILENAME como o nome da tabela. A execução de arquivos com o mesmo nome de arquivo permitirá anexar a uma tabela existente (útil quando você tiver 30 arquivos com nomes diferentes, mas manterá o mesmo nome de mês a mês). Acesse 2010

Onde eu tive problemas: as tabelas daninhas não seriam anexadas ao executar o mesmo arquivo nomeado . Ele sempre criaria uma nova tabela e acrescentaria um 1 2 3 etc. whatever_csv whatever_csv1 whatever_csv2. *** Você deve retirar o período do nome do arquivo. Mesmo que o acesso o altere automaticamente para um sublinhado quando ele cria a tabela, ele vê que o nome do arquivo e a tabela são nomeados de forma diferente. Isso se aplica a qualquer caractere não permitido pelo Access.

Trunca os quatro últimos do nome do arquivo para remover .csv usando strTable = Esquerda (strFile, Len (strFile) - 4)

***** Aqui está a resposta para sua pergunta *****

Option Compare Database 
Option Explicit 

Function DoImport() 

 Dim strPathFile As String 
 Dim strFile As String 
 Dim strPath As String 
 Dim strTable As String 
 Dim blnHasFieldNames As Boolean 

 ' Change this next line to True if the first row in CSV worksheet 
 ' has field names 
 blnHasFieldNames = True 

 ' Replace C:\Documents\ with the real path to the folder that 
 ' contains the CSV files 
 strPath = "C:\Documents\" 

 ' Replace tablename with the real name of the table into which 
 ' the data are to be imported 

 strFile = Dir(strPath & "*.csv") 


 Do While Len(strFile) > 0 
       strTable = Left(strFile, Len(strFile) - 4) 
       strPathFile = strPath & strFile 
       DoCmd.TransferText acImportDelim, , strTable, strPathFile, blnHasFieldNames 


 ' Uncomment out the next code step if you want to delete the 
 ' EXCEL file after it's been imported 
 '       Kill strPathFile 

       strFile = Dir() 

 Loop 


End Function 
    
por 03.10.2014 / 09:53
1

Se seus arquivos csv tiverem o mesmo formato, geralmente é melhor mantê-los em uma única tabela. Por exemplo, você pode ter duas tabelas, uma com o nome dos seus arquivos e outra com o conteúdo delas.

Para importar o conteúdo de vários csv, geralmente prefiro o VBA. Existem 3 opções principais:

  • DoCmdTransferText
  • Objeto do sistema de arquivos
  • declaração aberta de E / S

Como todos os seus arquivos csv têm o mesmo formato, o caminho mais fácil é o primeiro.

Para usar o DoCmd TransferText , é necessário especificar um esquema . Você pode criar esse esquema importando manualmente apenas um arquivo e quando a opção de salvar o esquema aparecer, basta salvá-lo. Então, usando a função Dir () com a extensão "* .csv" você percorre seu diretório e importa todos os seus arquivos.

HTH

    
por 02.02.2014 / 10:22