Esse código uso para importar ficheiros .txt e queria adaptar para que fizesse a mesma coisa para ficheiros XML.
Em anexo vem o ficheiro que quero importar, se tiver uma outra forma de importar agradecia a quem pudesse ajudar.
- Código:
Function LeFicheiros()
Dim objFSO, objPasta, objFicheiros, objFicheiro, objTextFile, objFSOXML As Object 'declaracao de variaveis
Dim strLinha As String
Set objFSO = CreateObject("Scripting.FileSystemObject") ' variavel de sistema tipo obj file system object
Set objPasta = objFSO.getFolder("C:\Users\David Morgado\Desktop\Teste\Ficheiros") ' objpasta com a pasta dos ficheiros
Set objFicheiros = objPasta.Files ' guardar na variavel os ficheiros da pasta
For Each objFicheiro In objFicheiros ' percorre no ciclo dos ficheiros com o obj ficheiro
Set objFSOXML = CreateObject("Scripting.FileSystemObject") ' file system object
Set objTextFile = objFSOXML.OpenTextFile("C:\Users\David Morgado\Desktop\Teste\Ficheiros\" & objFicheiro.Name, 1) ' abertura do ficheiro nas posicao pretendida, com o 1 no final por defeito
Do While objTextFile.atendofstream = False ' faz enquanto nao chega at end of file
strLinha = objTextFile.ReadLine 'le linha a linha e guarda na variavel
RegistaLinhas strLinha, objFicheiro.Name ' está a "apanhar" o nome do ficheiro com o . name
' funcao dos record sets, para guardar na base de dados, entra com a variavel que le linha a linha de cada vez
Loop
Set objTextFile = Nothing ' garantir que a variavel objtextfile está vazia
objFSO.MoveFile "C:\Users\David Morgado\Desktop\Teste\Ficheiros\" & objFicheiro.Name, "C:\Users\David Morgado\Desktop\Teste\Tratados\" ' mover os ficheiros integrados para a pasta tratados
Next
End Function
Function RegistaLinhas(strLinha As String, strFicheiro As String) ' nesta funcao entra o strLinha com uma string para os nomes dos ficheiros a guardar em base de dados posteriormente, não podia passar o objFicheiro.Nme
Dim rstDados As Recordset ' rstDados com o nome da tabela que se prentende guardar os registos
Set rstDados = CurrentDb().OpenRecordset("Dados", dbOpenDynaset) ' variavel definida com a base de dados atual, e entra com o nome da tabela
strdelimitado = Split(strLinha, ";")
If strdelimitado(0) = "INICIO" Or strdelimitado(0) = "FIM" Or strdelimitado(0) = "20" Then ' validar para camioes com texto de inicio ou fim para ignorar e sair da funcao
Exit Function
End If
rstDados.AddNew ' cria uma nova linha em branco na tabela
rstDados![Nome_Camião] = Left(strFicheiro, InStr(strFicheiro, "_") - 0)
rstDados![Dairy] = strdelimitado(0)
rstDados![Ves] = strdelimitado(1)
rstDados![ID] = strdelimitado(2)
rstDados![Lat] = strdelimitado(3)
rstDados![Long] = strdelimitado(4)
rstDados![Nome] = strdelimitado(5)
rstDados![Q] = strdelimitado(6)
rstDados![S] = strdelimitado(7)
rstDados![V] = strdelimitado(8)
rstDados![V2] = strdelimitado(9)
rstDados![Avg] = strdelimitado(10)
rstDados.Update ' este update é que grava/escreve na tabela da base de dados
Set rstDados = Nothing
End function