Импорт из Excel - нечисловые значения игнорируются - PullRequest
4 голосов
/ 19 сентября 2009

У меня есть код, который импортирует из листов Excel указанного формата. В одном из столбцов большинство данных являются числовыми, но также присутствуют нечисловые значения. По некоторым причинам нечисловые значения игнорируются кодом импорта.

Строка подключения выглядит следующим образом:

    Dim FileConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=" & Path & "\" & _
    Filename & ";Extended Properties=" & _
    """Excel 12.0;HDR=YES;IMEX=1;"""

Фактический код импорта выглядит примерно так:

    Dim Factory As DbProviderFactory = _
    DbProviderFactories.GetFactory("System.Data.OleDb")

    Dim Adapter As DbDataAdapter = Factory.CreateDataAdapter(), _
    DataObject As New DataSet

    Using Connection As DbConnection = Factory.CreateConnection
        Connection.ConnectionString = FileConnectionString

        Using Command As DbCommand = Connection.CreateCommand

            Command.CommandText = _
            "SELECT [Column1], [Column2]" & _
            "FROM [Sheet1$]"

            Adapter.SelectCommand = Command

            Adapter.Fill(DataObject)

            ...

Обратите внимание, что я включил IMEX = 1 , чтобы сообщить Excel о наличии смешанных данных. Это не похоже на помощь. Есть идеи, что происходит?

Ответы [ 2 ]

3 голосов
/ 19 сентября 2009

Я заметил, что Engine определяет тип данных столбца по первому значению в столбце.

Таким образом, если ваше первое значение является числовым, механизм примет столбец как числовой, и при попытке преобразовать альфа-значение в числовой произойдет сбой.

Что я обычно делал, так это добавлял подчеркивание ко всем значениям в Excel, а затем, в SQL или DataSet, чтобы заменить первое подчеркивание. Надеюсь, это поможет

2 голосов
/ 19 сентября 2009

По умолчанию Excel основывает тип данных для столбца на первых 8 строках данных.Чтобы изменить это, вам нужно обновить раздел реестра:

HKLM \ Software \ Microsoft \ Office \ 12.0 \ Access Connect Engine \ Engines \ Excel

с номеромстрок вы хотите, чтобы Excel сканировал.Установите значение 0, чтобы оно сканировало все строки.Обратите внимание, что установка его в ноль может немного замедлить загрузку Excel, особенно в больших электронных таблицах.

Кроме того, если вы также используете Excel 2003, вам необходимо обновить второй ключ реестра:

HKLM \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Jet \ 4.0 \ Engines \ Excel

...