2011-03-31 7 views
2

У меня есть файл следующие первенствуетDelphi - строки Excel получить с помощью ADO Query

enter image description here

Я набор AdoConnection.ConnectionString в

AdoConnection.ConnectionString :=' Provider=Microsoft.Jet.OLEDB.4.0;' + 
      'Data Source=' +aFileName + ';' + 
      'Extended Properties=Excel 8.0;'; 

где aFileName это имя файла Excel.

После этого с компонентом ADOQuery (соединение установлено в AdoConnection) я выполняю «select * from [Sheet1 $]».

Проблема в том, что строки 16802 и 17179 отсутствуют в результатах запроса, и я не знаю почему. Все поля из листа заданы как общие. Я использую Delphi 7.

Есть ли у вас идеи?

LE: Тип всех полей из AdoQuery - WideString. В запросе присутствуют только строки, в которых значения из последних двух столбцов имеют «зеленый знак». Я не гений в Excel, но запрос не должен получать все данные, существующие на листе?

+0

Почему это строки отличаются Align? –

+0

@ Neftalí Я предполагаю, что у них разные типы данных. –

+0

@Roman_Yankovsky - Да, я думаю то же самое, но я точно знаю. Это может быть причиной того, что запрос не распознает данные. –

ответ

2

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

Решение заключается в использовании режима импорта (IMEX = 1). Обратите внимание, что это имеет странное поведение, если вы также пытаетесь обновить строки.

AdoConnection.ConnectionString :=' Provider=Microsoft.Jet.OLEDB.4.0;' + 
     'Data Source=' +aFileName + ';' + 
     'Extended Properties="Excel 8.0;IMEX=1"'; 

PRB: Excel Values Returned as NULL Using DAO OpenRecordset

+0

PRB: значения Excel возвращены как NULL Использование DAO OpenRecordset - это был ответ. – RBA

1

Единственное, что приходит в голову, это то, что среди скрытых строк есть одна или несколько строк, которые не имеют значения ни в одной ячейке. Обычно Excel занимает первую полностью пустую строку и столбец, которые являются границами диапазона данных. Диапазон данных в этом случае не является диапазоном данных «только и ол», а набором строк и столбцов, которые Excel рассматривает как таблицу. Это то, что вы делаете, обращаясь к листу через Ado.

+0

спасибо Марьян, но проблемы в том, что я получаю в свой запрос только строки, в которых последние 2 столбца имеют ячейки с этим «зеленым» предупреждением ... – RBA

+0

Затем проверьте, что говорит зеленый сигнал. Это может по крайней мере дать вам подсказку. Если это что-то вроде «функция отличается от других ячеек в этом регионе», которые могут указывать на полностью пустые строки в этом регионе ... –

1

2 строки имеют некоторые числовые поля в столбцах D и E, вы должны изменить эти значения на строку, , вы можете изменить тип ячейки на текст.

Смежные вопросы