我对Excel VBA完全是个新手。我最近设法将以下宏安装到我的个人工作簿中,以便只需单击一个按钮即可导入CSV文件(选择必要的选项):
Sub OpenTextFile()
filetoopen = Application.GetOpenFilename("Text Files (*.txt;*.csv), *.txt;*.csv")
If filetoopen = Null Or filetoopen = Empty Then Exit Sub
Workbooks.OpenText Filename:=filetoopen, _
Origin:=65001, DataType:=xlDelimited, Comma:=True
End Sub它起作用了。然而,它并不总是有效的。我将它用于不同的CSV文件(所有这些文件都是在ISO 8601日期系统中预先格式化的),但我得到了不同的结果。在其中一些文件中,日期输出是DD/MM/YYYY hh:mm,但在另一些文件中,它是我无法理解的奇怪内容(比如00:00,0或50:00,0)。我可以手动选择行内容并将格式更改为长日期,因此至少我确信excel将数据识别为日期,而不是文本。
如何确保所有日期的格式相同?这依赖于什么?
谢谢!
发布于 2016-11-29 20:57:42
导入到excel中时,不同的日期格式是出了名的,因为windows本地化(具有默认的分隔符、日期和数字格式)可能很难处理。
不要仅仅为了导入一个文件而搞乱windows本地化。
在重复导入csv-Files时,我使用以下方法:
schema.ini-file。有关更多信息,请参见this - query the csv-File with SQL and ADODB, which allows for a simple `SELECT *` simple pre-processing (reordering columns, filtering records, ...). I can output the resulting ADODB.Recordset into my workbook OR
- I set up a linked table in my workbook an ADODB.Connection. The data can be updated with a simple macro or right-click.
无论哪种方式:国际海事组织与schema.ini-Files合作有以下优势
schema.ini-file来处理数据。编辑:这可以提供一个起点。
yourfile.csv CharacterSet = ANSI ColNameHeader = FALSE Format = Delimited(;) DateFormat = "DD.MM.YYYY“DateTimeFormat = "DD.MM.YYYY hh:nn,ss”Col1 = yourdatefield Col2 = somelongfield Long
- filename
- format (what delimiter, or is it fixed)
- DateFormat and/or DateTimeFormat. Realize that minutes are `nn` instead of the common `mm`
- your desired column-headers and the columns data-types. You need `ColNameHeader = FALSE` for this.
在VBA中设置一个ADO连接,使您能够运行语句并向ADO-recordsets.
使用记录集的SELECT * FROM [Text;DATABASE=C:\Users\yourFolder].yourfile.csv
注意:您提到了一些混合的时间-十进制书写(50:00,0)。只要列中的任何数字引用时间单位,例如秒或分钟,则将字段声明为DateTime-field是没有问题的。
但是:如果像00:00,50这样的东西表示半分钟而不是50秒,则可能需要将其作为文本读取,然后在Import-SQL中使用FORMAT()、LEFT()等SQL语句进行转换
发布于 2016-11-30 20:06:54
解决方法:问题不在于Excel,而在于为我提供CSV文件的服务。显然,他们有两个选项可以从他们的网站上下载CSV,而且他们的日期格式也不同。其中一个正确地使用了ISO8601,而另一个则在日期字符串的末尾添加了".0“,因此Excel将其转换为文本字符串。
无论如何,感谢所有人的回复。
https://stackoverflow.com/questions/40866225
复制相似问题