PRB: Excel значения, возвращаемые как NULL с помощью DAO OpenRecordset

Переводы статьи Переводы статьи
Код статьи: 194124 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Проблема

При подключении к электронной таблице Excel с помощью метода DAO OpenRecordset, некоторые значения в столбце Excel могут быть возвращены как значение Null при underlyingvalue не является Null. Это обычно происходит, когда числовые и datatypesare текст, перемежаемый того же столбца Excel.

Причина

Эта проблема связана с ограничением драйвер Excel ISAM в thatonce определяет тип данных столбца Excel, он возвращает Nullfor любое значение, которое не относится к типу данных драйвер ISAM установлено tofor столбца Excel. Драйвер Excel ISAM определяет тип данных столбца anExcel, проверяя фактические значения в первые несколько строк и тип данных, который представляет большинство значений в itssampling thenchooses.

Решение

Существует два способа решения этой проблемы:
  1. Убедитесь, что данные в Excel они вводятся как текст. Просто переформатирование столбца Excel в текст будет не этого. Необходимо повторно ввести существующие значения после переформатирования столбца Excel. В Microsoft Excel можно использовать повторно ввести существующие значения в выбранной ячейке F5.
  2. Можно добавить параметр IMEX = 1; для Excel подключиться строки в методе OpenDatabase. Например:
          Set Db = OpenDatabase("C:\Temp\Book1.xls", _
                False, True, "Excel 8.0; HDR=NO; IMEX=1;")
    
    						
    Примечание: Параметр IMEX = 1 сообщает драйверу использовать режим импорта. В этом состоянии установки ImportMixedTypes реестра = текст будет замечено. Это заставляет смешанные данные быть преобразованы в текст. Для надежной работы может также потребоваться изменить параметр реестра, TypeGuessRows = 8. По умолчанию драйвер ISAM просматривает первые восемь строк и из этой выборки определяет тип данных. Если это восемь строк выборки состоит только из цифр, а затем IMEX = 1 не преобразовать тип данных по умолчанию для текста; она останется числовое.

    Необходимо быть осторожным, IMEX = 1 не используется беспорядочно. Это режим ИМПОРТА, так что результаты могут быть непредсказуемыми, при попытке выполнить добавление или обновления данных в этот режим.

    Возможные параметры IMEX являются:
            0 is Export mode
            1 is Import mode
            2 is Linked mode (full update capabilities)
    
    						
    Это раздел реестра, где находятся параметры, описанные выше:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Excel

    К разделу ссылки сведения этой статьи на когда электронная таблица Excel содержит текст заголовков столбцов с числовыми данными.

Статус

Данное поведение является нормальным.

Дополнительная информация

Действия для воспроизведения поведения

Чтобы дублировать проблемы, создайте книгу Excel с таблицей defaultSheet1. В первом столбце Лист1 введите followingvalues - 123, aaa, 456, bbb 789. Сохранение книги в вашей C:\Tempdirectory с именем Book1.XLS.

В Visual Basic создайте новый проект стандартный exe-ФАЙЛ и выполните следующие действия:
  1. Сделайте ссылку на библиотеку объектов Microsoft DAO 3.5. В Visual Basic 6.0 это будет библиотека объектов Microsoft DAO 3.51.
  2. Добавьте новую форму CommandButton.
  3. Поместите следующий код в раздел общих объявлений формы:
          Dim Db As Database
          Dim Rs As Recordset
    
          Private Sub Command1_Click()
              Set Rs = Db.OpenRecordset("Sheet1$")
              'This will print the spreadsheet Text values as Nulls.
    
              Do While Not Rs.EOF
                  Debug.Print Rs(0)
                  Rs.MoveNext
              Loop
    
          End Sub
    
          Private Sub Form_Load()
              'HDR refers to the Excel header row.
          Set Db = OpenDatabase("C:\Temp\Book1.xls", _
                   False, True, "Excel 8.0; HDR=NO;")
    
          End Sub
    
          Private Sub Form_Unload(Cancel As Integer)
              Db.Close
              Set Db = Nothing
    
          End Sub
    
    						
    Запустите проект, нажав клавишу F5 и обратите внимание, что в окне отладки текстовые значения печатаются как Null. Если большинство значений в таблице Excel текст, результат из приведенного выше кода будет отменено. Числовые значения будут возвращаться значения NULL.

Ссылки

За дополнительной информацией обратитесь к следующей статье theMicrosoft базы знаний Майкрософт:

190195: Методические УКАЗАНИЯ: извлечения данных из листа Microsoft Excel с помощью DAO

Свойства

Код статьи: 194124 - Последний отзыв: 1 ноября 2013 г. - Revision: 5.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 4.0 Enterprise Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
Ключевые слова: 
kbprb kbmt KB194124 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Данная статья переведена с использованием программного обеспечения Майкрософт для машинного перевода и, возможно, отредактирована посредством технологии Community Translation Framework (CTF). Корпорация Майкрософт предлагает вам статьи, обработанные средствами машинного перевода, отредактированные членами сообщества Майкрософт и переведенные профессиональными переводчиками, чтобы вы могли ознакомиться со всеми статьями нашей базы знаний на нескольких языках. Статьи, переведенные с использованием средств машинного перевода и отредактированные сообществом, могут содержать смысловое, синтаксические и (или) грамматические ошибки. Корпорация Майкрософт не несет ответственности за любые неточности, ошибки или ущерб, вызванные неправильным переводом контента или его использованием нашими клиентами. Подробнее об CTF можно узнать по адресу http://support.microsoft.com/gp/machine-translation-corrections/ru.
Эта статья на английском языке: 194124

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com