У меня есть данные, которые имеют значения даты и времени, которые мне нужно преобразовать в другой формат. Я создал формулу Excel, которая объединяет строку в нужный мне формат. В настоящее время у меня есть столбец с формулой в нем в формате TEXT.

Тем не менее, когда я сохраняю данные в файл CSV, Excel настаивает на изменении временной части с 20:22 до 20:22.

Как я могу получить его для сохранения в CSV-файл, как отображается?

2 ответа2

0

В моем Excel 2007 он сохраняет требуемый формат, но при необходимости может сработать «преобразование» времени, фактически сохраненного в A1 как таковое (т. Е. 0,848611 для 20:22), как показано ниже [Я не могу полностью протестировать, потому что не вижу симптомы у тебя есть!]

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

0

К сожалению, в Excel обработка CSV всегда была довольно плохой.

Общепринятым решением является создание файла CSV самостоятельно с использованием кода VBA. Таким образом, вы можете отформатировать вещи точно так, как вы хотите, и вы можете остановить довольно глупую вещь, которую делает Excel, которая заключается в том, чтобы сделать кавычки вокруг полей необязательными, а иногда и ошибочными. В Интернете есть несколько разумных примеров создания CSV-файлов и несколько надстроек, которые предоставляют эквивалентные инструменты.

Вот простой код, с которого можно начать:

' 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

Вам нужно будет добавить тест для дат и форматировать их соответственно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .