excel - Microsoft ACE 文本驱动程序将数字转换为日期
问题描述
我正在尝试在 Excel 中处理巨大的 CSV(~165 MB,~500K 行)并决定使用 ACE Text Driver。我已经知道我需要在程序文件旁边创建特殊的 section.ini文件。到目前为止,一切都很好。说,我有以下 CSV:
ID;VAL1 JSNT;6,00
Section.ini文件:
[测试.csv] 格式=分隔(;) ColNameHeader=真
VBA代码:
Sub GetEntries()
Dim file_path$, conn_string$, sql$
Dim rs As ADODB.Recordset
conn_string = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & ThisWorkbook.Path & "\;" & _
"Extended Properties=Text;"
sql = "SELECT * FROM [test.csv];"
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open sql, conn_string, adOpenForwardOnly, adLockReadOnly, adCmdText
wksOutput.Range("A1").CopyFromRecordset rs
End Sub
此代码有效,但请看一下结果:
换句话说,文本驱动程序将数字转换为日期!我认为这与 Excel 的转换曲折有关,但我确定原因是文本驱动程序。一切都很简单——我刚刚检查Type
了这个字段的属性——它是adDate
(7)。因此,Excel 与它无关。但是关于section.ini的页面说我可以手动设置字段类型,所以我在section.ini中添加了这一行:
Col2=VAL1 双精度
Col2
表示第二个字段并且Double
是该字段的类型。但是......它也无法正常工作!经过一些测试,我发现了以下内容。如果出现以下情况,该数字将转换为日期:
- 小数点前的数字在 0 到 23 之间(包括)
- 小数点后的数字在 00 到 59 之间(包括) 可以看到,数字
6,00
符合这个条件,所以它被转换为日期。
任何想法如何解决这个问题?还是我做错了什么?
更新
正如@shrivallabha.redij 所说,我可以将接收列的类型设置为文本。但这不是一个解决方案,因为我事先无法知道哪些列会以这种方式运行。
解决方案
推荐阅读
- javascript - 从 yarn.lock 添加或删除包 URL “.git”
- git - 运行 `git update-index --assume-unchanged 后似乎仍会跟踪文件
` - python - 熊猫:如何转置数据框的一部分
- python - Jenkins 中的 os.environ 变量返回 None
- sql - 如何通过两个不同的标准对 sql server 数据进行排序
- r - 为什么 R 中的 na.omit 用 0 替换所有内容?
- sql - 有没有办法在 SQL 中查找具有正向序列值的列?
- python - python是否使用其他方法保留注释顺序?
- c++ - 我在使用 mobaXterm 时遇到问题。下面的程序不断收到错误:
- android - 使用 Firebase Auth 在 Android 中获取 refreshToken 属性