Ir ao conteúdo

Excel Importar txt respeitando valor célula


Ir à solução Resolvido por Diegodcr,

Posts recomendados

Postado

Estou importando txt para salvar em csv porém quando tem algo digitado como por exemplo:

01/2

O excel formata automaticamente a célula para 01/02/2023. Isso acontece só de abrir o txt no excel.

Há alguma forma de importa/abrir txt no excel sem que ele complete para data?

Postado

@Edson Luiz Branco Assim deu certo.

Agora preciso de um vba pra importar todos os txt e salvar cada um em csv.

Eu tenho o código porém ainda ta salvando como data

Sub AbrirTXTeSalvarComoCSV()
    Dim sourceFolder As String
    Dim targetFolder As String
    Dim fileName As String
    Dim fileExtension As String
    Dim sourceFile As String
    Dim targetFile As String


    sourceFolder = "C:\txt\"
   
    targetFolder = "C:\csv\"
    
    fileName = Dir(sourceFolder & "*.txt")
    Do While fileName <> ""
        ' Obtém o nome do arquivo sem a extensão
        fileExtension = Right(fileName, Len(fileName) - InStrRev(fileName, "."))
        fileName = Left(fileName, Len(fileName) - Len(fileExtension) - 1)
        
        sourceFile = sourceFolder & fileName & "." & fileExtension
        
        targetFile = targetFolder & fileName & ".csv"

        Workbooks.OpenText Filename:=sourceFile, Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, _
            TextQualifier:=xlTextQualifierDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(5, 2)), _
            TrailingMinusNumbers:=True

        ActiveWorkbook.SaveAs Filename:=targetFile, FileFormat:=xlCSV, CreateBackup:=False
        
        ActiveWorkbook.Close SaveChanges:=False
        fileName = Dir
    Loop
End Sub

 

  • Curtir 1
Postado

Em seu código, o parâmetro FieldInfo abaixo:

 

..., FieldInfo:=Array(Array(5, 2))...

 

Está dizendo que somente a 5ª coluna (Array(5, 2)) do seu CSV será forçada a ser do tipo Texto (xlTextFormat tem o valor = 2) e as demais, como não especificadas, serão tratadas como do tipo "Geral". Se desejar que mais alguma coluna seja tratada como texto, aninhe mais um array para incluí-la também. Por exemplo, se além da 5ª coluna também quiser a 7ª coluna como texto, altere a partícula destacada para:

 

..., FieldInfo:=Array(Array(5, 2), Array(7,2))...

 

  • Solução
Postado

@Edson Luiz Branco Na verdade eu tive que tratar de forma diferente, célula por célula pois o código que você citou acima, não funcionava.

Option Explicit

Sub test()

    Dim fullName As String
    fullName = "c:\users\domenic\desktop\sample.txt"
    
    Dim columnCount As Long
    columnCount = GetColumnCountFromTextFile(fullName, vbTab)
    
    If columnCount = 0 Then
        MsgBox "No data found!", vbExclamation
        Exit Sub
    End If
    
    Workbooks.OpenText _
        Filename:=fullName, _
        DataType:=xlDelimited, _
        Tab:=True, _
        FieldInfo:=GetFieldInfo(columnCount)
    
    
End Sub

Private Function GetColumnCountFromTextFile(ByVal PathAndFilename As String, Optional ByVal Delim As String = ",") As Long

'   Returns the number of columns contains in a text file
'   First non-blank line used to determine number of columns based on delimiter

    Dim textLine As String
    Dim fileNumber As Long
    Dim columnCount As Long
    
    columnCount = 0
    fileNumber = FreeFile()
    Open PathAndFilename For Input As #fileNumber
        Do Until EOF(fileNumber)
            Line Input #fileNumber, textLine
            If Len(textLine) > 0 Then
                columnCount = UBound(Split(textLine, Delim)) + 1
                Exit Do
            End If
        Loop
    Close #fileNumber
    
    GetColumnCountFromTextFile = columnCount

End Function

Private Function GetFieldInfo(ByVal columnCount As Long) As Variant

'   Returns a two-dimensional array containing a column number and data type pair
'   Sets all columns to text format

    ReDim fieldInfoArray(1 To columnCount, 1 To 2)
    
    Dim i As Long
    For i = LBound(fieldInfoArray, 1) To UBound(fieldInfoArray, 1)
        fieldInfoArray(i, 1) = i
        fieldInfoArray(i, 2) = xlTextFormat
    Next i
    
    GetFieldInfo = fieldInfoArray()
    
End Function

 

Postado
11 horas atrás, Diegodcr disse:

...pois o código que você citou acima, não funcionava.

 

Na verdade não te passei nenhum código, apenas expliquei com um exemplo o parâmetro FieldInfo do método Workbooks.OpenText.

 

Mas como você já conseguiu resolver o problema, isso é o que importa.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!