Импорт данных из файла XLS с использованием ADO и Delphi
Я хочу импортировать некоторые данные из файла Excel (xls) с помощью TADOConnection
и TADOTable
.
Я подключаюсь к файлу без проблем, но когда я открываю TADOTable
некоторые поля имеют ftFloat
данных ftFloat
потому что их значения в файле excel являются числовыми, но их значения не являются числом!
Я хочу, чтобы все поля TADOTable
(столбцы файла Excel) имели ftString
данных ftString
.
- Откройте рабочую книгу и запустите макрос из другого - Delphi 2010
- Константы автоматизации Excel 2010 не работают в Delphi XE7
Я установил типы columms в файле Excel в Text
но никаких изменений не повлияло!
Как я могу это сделать?
Я предполагаю, что у вас есть большинство столбцов, которые могут показаться числовыми, а также некоторые, которые являются чистым текстом.
ADO
эффективно игнорирует column type
при импорте Excel. Вместо этого он угадывает типы столбцов, как указано в этой ссылке MSDN :
Предупреждение о смешанных типах данных
Как указывалось ранее, ADO должен угадывать тип данных для каждого столбца в листе или диапазоне Excel. (Это не зависит от настроек форматирования ячейки Excel.) Серьезная проблема может возникнуть, если у вас есть числовые значения, смешанные с текстовыми значениями в том же столбце. И Jet, и ODBC Provider возвращают данные типа большинства, но возвращают NULL (пустые) значения для типа данных меньшинства. Если два типа одинаково смешаны в столбце, поставщик выбирает числовой текст.
Одним из способов загрузки всех полей в виде строк является использование IMEX extended property
в вашей connection string
например:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx; Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1";
Установка IMEX на 1 делает ADO обрабатывать все столбцы как текст, как указано на следующей странице ConnectionStrings :
Используйте этот параметр [IMEX = 1], если вы хотите обрабатывать все данные в файле как текст, переопределяя тип столбца Excels «General», чтобы угадать, какой тип данных находится в столбце.
Вы можете найти дополнительную информацию об имуществе IMEX в этом вопросе SO .
Обновление : полевым типом данных, полученным с помощью этого ftWideString
будет ftWideString
.