问题
我有一个VBA程序,可以将数据从一个Excel文件导出为CSV。当遇到日期时,它会将其格式化为#2016-06-14#
。我假设散列标记(或octothorpe或井号或主题标签)用于表示该字段是日期字段。但是,当我将CSV导入另一个工作簿时,无论我如何格式化该字段,日期都不会出现。它仍包含#
个字符。
问题
如何将日期列导入为YMD格式日期?
附录
以下是我用于导出和导入的一些代码,供参考。
导出的
Sub WriteCSV(writeRange As Range, fileName As String)
Dim myFile As String, rng As Range, cellValue As Variant, i As Integer, j As Integer
myFile = ActiveWorkbook.Path & "\Results\" & fileName & ".csv"
Debug.Print myFile
Open myFile For Output As #1
For i = 1 To writeRange.Rows.Count
For j = 1 To writeRange.Columns.Count
cellValue = writeRange.Cells(i, j).value
If j = writeRange.Columns.Count Then
Write #1, cellValue
Else
Write #1, cellValue,
End If
Next
Next
Close #1
End Sub
导入的
Sub ReadCSV(targetCell As Range, filePath As String)
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & filePath, Destination:=targetCell)
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 437
.TextFileStartRow = 2
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
.Delete
End With
End Sub
答案 0 :(得分:2)
尝试输出.text而不是.value。
改变这个:
df$end
到此:
apply(df, 1, function(i) seq(as.numeric(i["start"]), as.numeric(i["end"])))
答案 1 :(得分:0)
弃掉那些#
当我将文件手动Save as
为CSV时,Excel不会将这些#
放在日期周围。相反,它会在我的区域设置中定义日期(即 - 对我来说 - dd/mm/yyyy
)
当导回时,记录器使用数组(... 4 ...)作为日期列,并且输入正确
无论如何,如果您在国际环境中工作,CSV 确实很糟糕,因为根据本地机器设置,它的行为会有所不同。由于定义不明确,它是我将使用的最后一种格式。