我有一些包含日期时间值的数据,需要将其转换为其他格式。我创建了一个 Excel 公式,可以将字符串连接成我需要的格式。我目前将包含公式的列格式化为 TEXT。
但是,当我将数据保存到 CSV 文件时,Excel 坚持将时间部分从 20:22 更改为晚上 8:22。
我怎样才能将其保存到显示的 CSV 文件中?
答案1
遗憾的是,Excel 对 CSV 的处理一直很差。
普遍接受的解决方案是使用 VBA 代码自己创建 CSV 文件。这样,您就可以按照自己的意愿格式化内容,并且可以避免 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
您需要在其中添加日期测试并进行相应的格式化。
答案2
在我的 Excel 2007 中,它确实保留了所需的格式,但如果有必要,A1
按如下方式“转换”实际存储的时间(即 20:22 的转换时间为 0.848611)可能会有效 [我无法完全测试,因为我没有看到您所看到的症状!]:
=IF(HOUR(A1)<10,"0"&HOUR(A1)&":"&MINUTE(A1),HOUR(A1)&":"&MINUTE(A1))