Как заставить Excel сохранить поля даты как показано
У меня есть данные со значениями даты и времени, которые мне нужно преобразовать в другой формат. Я создал формулу Excel, которая объединяет строку в нужный мне формат. В настоящее время у меня есть столбец с формулой в нем в формате TEXT.
Тем не менее, когда я сохраняю данные в файл CSV, Excel настаивает на изменении временной части с 20:22 до 20:22.
Как я могу получить его для сохранения в CSV-файл, как отображается?
2 ответа
В моем Excel 2007 он сохраняет требуемый формат, но при необходимости "конвертирует" время, фактически сохраненное в A1
как таковой (то есть 0,848611 для 20:22), как показано ниже, может работать [Я не могу полностью проверить, потому что я не вижу симптомы, которые вы есть!]:
=IF(HOUR(A1)<10,"0"&HOUR(A1)&":"&MINUTE(A1),HOUR(A1)&":"&MINUTE(A1))
К сожалению, обработка CSV в Excel всегда была довольно плохой.
Общепринятым решением является создание файла 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
Вам нужно будет добавить тест для дат и отформатировать его соответствующим образом.