Microsoft ACE Text Driver преобразует числа в даты - PullRequest
1 голос
/ 21 марта 2019

Я пытаюсь обработать огромный 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

Этот код работает , но посмотрите на результат: AceTextDriverConvertsNumberToDate

Другими словами, текстовый драйвер преобразовал число в дату!Я думал, что это что-то в Excel с его поворотами преобразования, но я убедился, что причина была Text Driver.Все просто - я только что проверил Type свойство этого поля - и оно было adDate (7).Итак, Excel не имеет к этому никакого отношения.Но на странице о section.ini написано, что я могу установить тип поля вручную, поэтому я добавил эту строку в section.ini:

Col2=VAL1 Double

Col2 означает второе поле, а Double - типэтого поля.Но ... это тоже не работает!Some После некоторых испытаний я обнаружил следующее.Число преобразуется в дату, если:

  1. Число до десятичной точки находится в диапазоне от 0 до 23 (включая)
  2. Число после десятичной точки находится в диапазоне от 00 до 59 (включая)Как видите, число 6,00 соответствует этому условию, поэтому оно конвертируется в дату.

Есть идеи, как решить эту проблему?Или я что-то не так делаю?

ОБНОВЛЕНИЕ

Как отметил @ shrivallabha.redij, я мог бы установить тип получаемых столбцов как Текст.Но это не решение, потому что я не знаю заранее , какие столбцы могут вести себя таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...