我怀疑是Excel无法理解格式的问题…… 虽然你选择了日期格式,但仍然是文本格式。
你可以简单地测试一下。当你尝试更新日期格式时,选择该列,然后右键点击它,选择格式化单元格(就像你已经做的那样),但选择2001-03-14选项(靠近列表底部)。然后查看你的单元格的格式。
我会怀疑只有一些日期格式更新正确,说明Excel仍然把它当作一个字符串,而不是日期(注意下面的屏幕截图中的不同格式)!
有解决这个问题的方法,但是,没有一个会因为你每次导出的时候都是自动的。我建议使用VBa,在这里你可以简单地运行一个宏,将美国的日期格式转换为英国的日期格式,但是,这意味着每次都要复制和粘贴VBa到你的工作表。我将假设导出的Exchange Excel文件将始终具有相同的文件名/目录,并提供了一个工作示例:
所以,创建一个新的Excel表,名为ImportedData.xlsm(excel启用)。这就是我们要导入导出的Exchange Excel文件的文件!
将这个VBa添加到ImportedData.xlsm文件中
Sub DoTheCopyBit()
Dim dateCol As String
dateCol = "A" 'UPDATE ME TO THE COLUMN OF THE DATE COLUMN
Dim directory As String, fileName As String, sheet As Worksheet, total As Integer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
directory = "C:\Users\Dave\Desktop\" 'UPDATE ME
fileName = Dir(directory & "ExportedExcel.xlsx") 'UPDATE ME (this is the Exchange exported file location)
Do While fileName <> ""
'MAKE SURE THE EXPORTED FILE IS OPEN
Workbooks.Open (directory & fileName)
Workbooks(fileName).Worksheets("Sheet1").Copy _
Workbooks(fileName).Close
fileName = Dir()
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Dim row As Integer
row = 1
Dim i As Integer
Do While (Range(dateCol & row).Value <> "")
Dim splitty() As String
splitty = Split(Range(dateCol & row).Value, "/")
Range(dateCol & row).NumberFormat = "@"
Range(dateCol & row).Value = splitty(2) + "/" + splitty(0) + "/" + splitty(1)
Range(dateCol & row).NumberFormat = "yyyy-mm-dd"
row = row + 1
Loop
End Sub
我还做了什么,就是将日期格式更新为yyyyy-mm-dd,因为这样一来,即使Excel给你的排序过滤器是A-Z,而不是最新的值,它仍然可以工作
我肯定上面的代码有错误,但我显然不知道你有什么类型的数据,但我用单列的日期测试了一下,它对我来说很好!
如何在MS Office中添加VBA?