Excel由于某种原因使用哈希标记格式化日期

时间:2016-06-15 15:40:28

标签: excel vba csv date-formatting

问题

我有一个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

2 个答案:

答案 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 确实很糟糕,因为根据本地机器设置,它的行为会有所不同。由于定义不明确,它是我将使用的最后一种格式。