我遇到了以编程方式打开.csv文件的问题。该文件是每日数据的时间序列,其中有几个数据点与每个日期相关联。
当我手动打开文件时,日期正确打开,日期格式为dd/mm/yyyy
。但是,当我以编程方式打开文件时,截至每月12日的日期将以mm/dd/yyyy
打开,但格式仍为dd/mm/yyyy
(例如,1983年7月1日(1983年1月7日) ,将于1983年1月7日(1983年7月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)行。很抱歉没有把它扔掉。
答案 0 :(得分:7)
由于OP在评论中已经回答了这个问题,但没有作为正式答案发布,我会把它放在这里以防其他人像我一样错过它。
workbook = workbooks.Open(filename, Local:= true)
通过设置Local = true使用本地机器日期格式而不是假设mdy所以在澳大利亚(dmy)这样的语言环境中它会改变Open()的行为
答案 1 :(得分:0)
我可以尝试将整个.csv文件导入为逗号分隔的文本,而不是实际打开文件,但是,如果我可以在打开文件时停止更改日期,则会更容易,更快。
如果你把它作为CDT打开它仍然很快。您只需使用.OpenText
代替.Open
即可。其余代码保持不变:)
尝试录制宏,您会看到代码看起来有点像这样。
Workbooks.OpenText Filename:= File, _
Origin:=437, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
答案 2 :(得分:0)
我发现user2981639有正确的想法,但我的语法错误是' Local:true'所以 我使用过' local:= True'代替
这个问题让我疯了,因为我在csv文件中也有2个备忘录字段。 如果我试图以任何方式格式化日期,备忘录字段将无法正确导入,它们将被截断为255个字符,或者任何嵌入的CRLF字符会将记录切割成碎片,具体取决于有多少。
谢谢你们发帖
答案 3 :(得分:0)
在这里,您将看到一个带有示例的工作代码。这个问题也让我感到沮丧。我在excel中打开一个.txt文件,我用过的日期是从dd-mm-yyyy格式转换为mm-dd-yyyy格式。下面你看到一个解决方案。它位于最后一个命令中(Local:= True)。见下文。希望它有所帮助。
Note that while trasferring .txt file to excel use File Origin as "xlWindows:
Workbooks.OpenText Filename:= _
ThisWorkbook.Worksheets("Reporting").Cells(3, 6), Origin:=xlWindows, _
StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(49 _
, 1), Array(50, 1), Array(67, 1), Array(80, 1), Array(93, 1), Array(106, 1), Array(119, 1)) _
, DecimalSeparator:=",", ThousandsSeparator:=".", TrailingMinusNumbers:= _
True, Local:=True
注意:数组和小数分隔符的上述设置是我特定的工作 - 可能不适用于您。
答案 4 :(得分:0)
我也在努力寻找答案。但是,解决此问题的方法是::-
本地应该为真。 并且工作簿关闭保存更改必须为false。应该可以。
答案 5 :(得分:0)
我在 Office 365 中遇到了此问题。 通过Excel导入 csv 文件时,某些日期 dd / mm / jjjj (欧洲)被导入为美国日期 mm / dd / jjjj 。 csv 文件没有关闭的日期格式。
打开如下:
Set xla = CreateObject("Excel.Application")
Set xlb = xla.Workbooks.Open(sFilePath, ReadOnly:=False, Local:=True)
使用了本地设置,并解决了问题:-)
打开文件的其他选项是:
expression.Open (FileName, UpdateLinks, ReadOnly,
Format, Password, WriteResPassword,
IgnoreReadOnlyRecommended, Origin,
Delimiter, Editable, Notify, Converter,
AddToMru, Local, CorruptLoad)