【发布时间】:2012-03-26 10:41:47
【问题描述】:
我有 .csv 文件,它是每日数据的时间序列,每个日期都有几个数据点。
当我手动打开文件时,日期正确打开,日期格式为dd/mm/yyyy。
当我以编程方式打开文件时,每个月 12 日之前的日期都以mm/dd/yyyy 打开,尽管格式仍然是dd/mm/yyyy(例如,1983 年 7 月 1 日(1/7/1983)将是于 1983 年 1 月 7 日(1983 年 1 月 1 日)打开 - 这不仅仅是格式问题,与这些日期相关的儒略日期(自 1901 年 1 月 1 日以来的天数)也会发生变化,以及每个日期的 12 日之后的日期月份正确打开,虽然是文本而不是日期。
以文本形式输入的数据不是问题,但是,打开文件后立即更改的日期是有问题的。我可以尝试将整个 .csv 文件作为逗号分隔文本导入,而不是打开文件,但是,如果我可以在打开文件时阻止日期更改,将会更容易、更快捷。
Flder = InputBox("Copy and Paste Folder path here:")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set SourcePath = FSO.GetFolder(Flder)
For Each File In SourcePath.Files
Workbooks.Open (File)
FlNm = File.Name
StrtCol = Workbooks(FlNm).Worksheets(1).Range(Cells(4, 1), Cells(4, 30)).Find ("Mean").Column
Workbooks(FlNm).Worksheets(1).Range(Cells(1, 1), Cells(60000, 1)).Copy (Workbooks("Find Water Years V2.xls").Worksheets(1).Range("A3"))
Workbooks(FlNm).Worksheets(1).Range(Cells(1, StrtCol), Cells(60000, StrtCol + 1)).Copy (Workbooks("Find Water Years V2.xls").Worksheets(1).Range("B3"))
Workbooks(FlNm).Close
Next
问题似乎出现在Workbooks.Open(File)这一行。
【问题讨论】:
-
你能定义“以编程方式打开”吗?你的意思是通过 Excel 自动化?还是直接在VBA代码中? “打开文件”不可能改变任何内容;并非如此,但是您在问题中没有发布任何与此相关的内容。打开 .csv 文件本身不会更改内容(例如,在记事本中);发布一些代码或其他信息,显示您如何阅读它以及您对阅读的文本做了什么。否则,我怀疑您的问题将被关闭为“不是一个真正的问题”。 :)
-
抱歉,Ken 不够清晰,代码如下。
-
这里必须同意肯。有一个根本原因。那时文件在记事本中是什么样子的,你是如何打开文件的?它是否被拉入模板。粘贴了吗?
-
使用
Workbooks.Open(File)将文件直接打开到excel中(见上面我刚刚粘贴的代码)。在记事本中打开数据时日期是正确的,格式为dd/mm/yyyy,与手动打开文件时相同。 -
所以,rep 还不够高,无法回答我自己的问题。解决方案是将
Workbooks.Open的本地变体设置为true,强制它使用本地设置解析数据,而不是使用默认设置(美国)。如果你们中的任何一个想回答问题,请随意,否则我会在今天下午晚些时候或明天早上抛出答案。