Como obter o Excel para salvar os campos de data conforme exibidos

0

Eu tenho dados com valores de data e hora que preciso converter em um formato diferente. Eu criei uma fórmula do Excel que concatena a string exatamente no formato que eu preciso. No momento, tenho a coluna com a fórmula formatada como TEXTO.

No entanto, quando salvo os dados em um arquivo CSV, o Excel insiste em alterar a parte do horário das 20:22 às 20:22.

Como posso fazer isso para salvar em um arquivo CSV conforme exibido?

    
por Wifi Test 04.03.2013 / 17:34

2 respostas

0

Infelizmente, o modo como o Excel trata CSVs sempre foi muito ruim.

A solução geralmente aceita é criar o arquivo CSV usando o código VBA. Dessa forma você pode formatar as coisas exatamente como você quer e você pode parar a coisa bastante tola que o Excel faz, que é tornar as cotações em torno dos campos opcionais e às vezes errar. Há vários exemplos razoáveis de criação de arquivos CSV na Internet e vários suplementos que fornecem ferramentas equivalentes.

Aqui está um código simples para você começar:

' Output a more consistant CSV file
Public Sub OutputQuotedCSV()
    Const QSTR As String = """"
    Dim myRecord As Range
    Dim myField As Range
    Dim vFilename As Variant
    Dim nFileNum As Long
    Dim sOut As String

    'Get a filename to save as
    vFilename = Application.GetSaveAsFilename(filefilter:="Microsoft CSV files,*.csv", _
    title:="Save as CSV with fields in double quotes")

    If vFilename = False Then Exit Sub 'User chose Cancel

    nFileNum = FreeFile
    Open vFilename For Output As #nFileNum
    For Each myRecord In Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row)
        With myRecord
            For Each myField In Range(.Cells(1), Cells(.Row, 256).End(xlToLeft))
                sOut = sOut & "," & QSTR & _
                Replace(myField.Text, QSTR, QSTR & QSTR) & QSTR
            Next myField
            Print #nFileNum, Mid(sOut, 2)
            sOut = Empty
        End With
    Next myRecord
    Close #nFileNum
End Sub

Você precisará adicionar um teste para datas e formatar adequadamente.

    
por 04.03.2013 / 23:03
0

No meu Excel 2007, ele preserva o formato necessário, mas se necessário 'converter' um tempo realmente armazenado em A1 como tal (ou seja, 0,848611 para 20:22) conforme abaixo pode funcionar [não posso testar completamente porque Eu não estou vendo os sintomas que você é!]:

=IF(HOUR(A1)<10,"0"&HOUR(A1)&":"&MINUTE(A1),HOUR(A1)&":"&MINUTE(A1))

    
por 12.04.2013 / 02:25