Я пытаюсь обработать огромный CSV (~ 165 МБ, ~ 500 КБ строк) в Excel и решил использовать ACE Text Driver.Я уже знал, что мне нужно создать специальный файл section.ini рядом с файлом программы.Все идет нормально.Скажем, у меня есть следующий CSV:
ID;VAL1
JSNT;6,00
Файл Section.ini :
[test.csv]
Format=Delimited(;)
ColNameHeader=True
Код 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 с его поворотами преобразования, но я убедился, что причина была Text Driver.Все просто - я только что проверил Type
свойство этого поля - и оно было adDate
(7).Итак, Excel не имеет к этому никакого отношения.Но на странице о section.ini написано, что я могу установить тип поля вручную, поэтому я добавил эту строку в section.ini:
Col2=VAL1 Double
Col2
означает второе поле, а Double
- типэтого поля.Но ... это тоже не работает!Some После некоторых испытаний я обнаружил следующее.Число преобразуется в дату, если:
- Число до десятичной точки находится в диапазоне от 0 до 23 (включая)
- Число после десятичной точки находится в диапазоне от 00 до 59 (включая)Как видите, число
6,00
соответствует этому условию, поэтому оно конвертируется в дату.
Есть идеи, как решить эту проблему?Или я что-то не так делаю?
ОБНОВЛЕНИЕ
Как отметил @ shrivallabha.redij, я мог бы установить тип получаемых столбцов как Текст.Но это не решение, потому что я не знаю заранее , какие столбцы могут вести себя таким образом.