Как заставить Excel сохранить поля даты как показано

681
Wifi Test

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

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

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

0
Можете ли вы опубликовать пример данных? Значения, которые * могут * интерпретироваться Excel как даты, обычно интерпретируются таким образом. ФОРМАТИРОВАНИЕ клеток ничего не меняет. Вам необходимо хранить объединенные значения таким образом, чтобы они не интерпретировались как даты. Если вы можете опубликовать файл примера или некоторые данные примера, я, вероятно, могу помочь. David Zemens 11 лет назад 0

2 ответа на вопрос

0
Julian Knight

Sadly, Excel's handling of CSV's has always been rather poor.

The generally accepted solution is to create the CSV file yourself using VBA code. That way you can format things exactly how you want to and you can stop the rather daft thing that Excel does which is to make the quotes around fields optional and sometimes get it wrong. There are a number of reasonable examples of CSV file creation on the Internet and several addins that provide equivalent tools.

Here is some simple code to get you started:

' 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 

You will need to add a test for dates into that and format accordingly.

0
pnuts

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

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