我想使用TADOConnection
和TADOTable
从Excel文件(xls)导入一些数据。
我连接到文件没有问题,但是当我打开TADOTable
时,某些字段有ftFloat
数据类型,因为它们在excel文件中的值是数字,但它们的值不是数字!
我希望TADOTable
(Excel文件列)的所有字段都具有ftString
数据类型。
我将Excel文件中的columms类型设置为Text
,但没有受到影响!
我该怎么做?
答案 0 :(得分:10)
我猜你有大多数列似乎是数字的,但也有些是纯文本。
ADO
在导入Excel时有效忽略column type
。相反,它会猜测列类型,如MSDN link中所述:
关于混合数据类型的警告
如前所述,ADO必须猜测每列的数据类型 在Excel工作表或范围中。 (这是不受Excel单元格影响 格式化设置。)如果您有数字,可能会出现严重问题 值与同一列中的文本值混合。 Jet和the 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 page中所述:
如果要将文件中的所有数据视为文本,请使用此[IMEX = 1], 重写Excel列类型“常规”以猜测数据类型 在专栏中。
您可以在此SO question中找到有关IMEX属性的更多信息。
更新:使用此检索的字段数据类型为ftWideString
。