使用ADO和Delphi从XLS文件导入数据
我想通过使用TADOConnection
和TADOTable
从Excel文件(xls)导入一些数据。
我连接到没有问题的文件,但是当我打开TADOTable
一些字段有ftFloat
数据types,因为它们在Excel文件中的值是数字,但它们的值不是一个数字!
我希望TADOTable
所有字段(Excel文件的列)具有ftString
数据types。
我在Excel文件中将Text
的types设置为Text
但没有任何更改受到影响!
我怎样才能做到这一点?
我猜你有大部分可能看起来是数字的列,但也有一些是纯文本。
导入Excel时, ADO
有效地忽略column type
。 相反,它猜测列types,正如在MSDN链接中所述 :
关于混合数据types的注意事项
如前所述,ADO必须猜测Excel工作表或范围中每列的数据types。 (这不受Excel单元格格式设置的影响。)如果在同一列中将数值与文本值混合,则会出现严重问题。 Jet和ODBC提供程序都返回多数types的数据,但为less数数据types返回NULL(空)值。 如果这两种types在列中均匀混合,提供者将在文本上select数字。
将所有字段加载为string的一种方法是在connection string
使用IMEX extended property
,如下所示:
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列types“常规”以猜测列中的数据types。
你可以在这个SO问题中find更多关于IMEX属性的信息。
更新 :使用它检索的字段数据types将是ftWideString
。